<?php namespace {function C($name = null, $value = null, $default = null) { static $_config = array(); if (empty($name)) { return $_config; } if (is_string($name)) { if (!strpos($name, '.')) { $name = strtoupper($name); if (is_null($value)) { return isset($_config[$name]) ? $_config[$name] : $default; } $_config[$name] = $value; return null; } $name = explode('.', $name); $name[0] = strtoupper($name[0]); if (is_null($value)) { return isset($_config[$name[0]][$name[1]]) ? $_config[$name[0]][$name[1]] : $default; } $_config[$name[0]][$name[1]] = $value; return null; } if (is_array($name)) { $_config = array_merge($_config, array_change_key_case($name, CASE_UPPER)); return null; } return null; } function load_config($file, $parse = CONF_PARSE) { $ext = pathinfo($file, PATHINFO_EXTENSION); switch ($ext) { case 'php': return include $file; case 'ini': return parse_ini_file($file); case 'yaml': return yaml_parse_file($file); case 'xml': return (array) simplexml_load_file($file); case 'json': return json_decode(file_get_contents($file), true); default: if (function_exists($parse)) { return $parse($file); } else { E(L('_NOT_SUPPORT_') . ':' . $ext); } } } if (!function_exists('yaml_parse_file')) { function yaml_parse_file($file) { vendor('spyc.Spyc'); return Spyc::YAMLLoad($file); } } function E($msg, $code = 0) { throw new Think\Exception($msg, $code); } function G($start, $end = '', $dec = 4) { static $_info = array(); static $_mem = array(); if (is_float($end)) { $_info[$start] = $end; } elseif (!empty($end)) { if (!isset($_info[$end])) { $_info[$end] = microtime(true); } if (MEMORY_LIMIT_ON && 'm' == $dec) { if (!isset($_mem[$end])) { $_mem[$end] = memory_get_usage(); } return number_format(($_mem[$end] - $_mem[$start]) / 1024); } else { return number_format(($_info[$end] - $_info[$start]), $dec); } } else { $_info[$start] = microtime(true); if (MEMORY_LIMIT_ON) { $_mem[$start] = memory_get_usage(); } } return null; } function L($name = null, $value = null) { static $_lang = array(); if (empty($name)) { return $_lang; } if (is_string($name)) { $name = strtoupper($name); if (is_null($value)) { return isset($_lang[$name]) ? $_lang[$name] : $name; } elseif (is_array($value)) { $replace = array_keys($value); foreach ($replace as &$v) { $v = '{$' . $v . '}'; } return str_replace($replace, $value, isset($_lang[$name]) ? $_lang[$name] : $name); } $_lang[$name] = $value; return null; } if (is_array($name)) { $_lang = array_merge($_lang, array_change_key_case($name, CASE_UPPER)); } return null; } function trace($value = '[think]', $label = '', $level = 'DEBUG', $record = false) { return Think\Think::trace($value, $label, $level, $record); } function compile($filename) { $content = php_strip_whitespace($filename); $content = trim(substr($content, 5)); $content = preg_replace('/\/\/\[RUNTIME\](.*?)\/\/\[\/RUNTIME\]/s', '', $content); if (0 === strpos($content, 'namespace')) { $content = preg_replace('/namespace\s(.*?);/', 'namespace \\1{', $content, 1); } else { $content = 'namespace {' . $content; } if ('?>' == substr($content, -2)) { $content = substr($content, 0, -2); } return $content . '}'; } function T($template = '', $layer = '') { if (false === strpos($template, '://')) { $template = 'http://' . str_replace(':', '/', $template); } $info = parse_url($template); $file = $info['host'] . (isset($info['path']) ? $info['path'] : ''); $module = isset($info['user']) ? $info['user'] . '/' : MODULE_NAME . '/'; $extend = $info['scheme']; $layer = $layer ? $layer : C('DEFAULT_V_LAYER'); $auto = C('AUTOLOAD_NAMESPACE'); if ($auto && isset($auto[$extend])) { $baseUrl = $auto[$extend] . $module . $layer . '/'; } elseif (C('VIEW_PATH')) { $baseUrl = C('VIEW_PATH'); } elseif (defined('TMPL_PATH')) { $baseUrl = TMPL_PATH . $module; } else { $baseUrl = APP_PATH . $module . $layer . '/'; } $theme = substr_count($file, '/') < 2 ? C('DEFAULT_THEME') : ''; $depr = C('TMPL_FILE_DEPR'); if ('' == $file) { $file = CONTROLLER_NAME . $depr . ACTION_NAME; } elseif (false === strpos($file, '/')) { $file = CONTROLLER_NAME . $depr . $file; } elseif ('/' != $depr) { $file = substr_count($file, '/') > 1 ? substr_replace($file, $depr, strrpos($file, '/'), 1) : str_replace('/', $depr, $file); } return $baseUrl . ($theme ? $theme . '/' : '') . $file . C('TMPL_TEMPLATE_SUFFIX'); } function I($name, $default = '', $filter = null, $datas = null) { static $_PUT = null; if (strpos($name, '/')) { list($name, $type) = explode('/', $name, 2); } elseif (C('VAR_AUTO_STRING')) { $type = 's'; } if (strpos($name, '.')) { list($method, $name) = explode('.', $name, 2); } else { $method = 'param'; } switch (strtolower($method)) { case 'get': $input = &$_GET; break; case 'post': $input = &$_POST; break; case 'put': if (is_null($_PUT)) { parse_str(file_get_contents('php://input'), $_PUT); } $input = $_PUT; break; case 'param': switch ($_SERVER['REQUEST_METHOD']) { case 'POST': $input = $_POST; break; case 'PUT': if (is_null($_PUT)) { parse_str(file_get_contents('php://input'), $_PUT); } $input = $_PUT; break; default: $input = $_GET; } break; case 'path': $input = array(); if (!empty($_SERVER['PATH_INFO'])) { $depr = C('URL_PATHINFO_DEPR'); $input = explode($depr, trim($_SERVER['PATH_INFO'], $depr)); } break; case 'request': $input = &$_REQUEST; break; case 'session': $input = &$_SESSION; break; case 'cookie': $input = &$_COOKIE; break; case 'server': $input = &$_SERVER; break; case 'globals': $input = &$GLOBALS; break; case 'data': $input = &$datas; break; default: return null; } if ('' == $name) { $data = $input; $filters = isset($filter) ? $filter : C('DEFAULT_FILTER'); if ($filters) { if (is_string($filters)) { $filters = explode(',', $filters); } foreach ($filters as $filter) { $data = array_map_recursive($filter, $data); } } } elseif (isset($input[$name])) { $data = $input[$name]; $filters = isset($filter) ? $filter : C('DEFAULT_FILTER'); if ($filters) { if (is_string($filters)) { if (0 === strpos($filters, '/')) { if (1 !== preg_match($filters, (string) $data)) { return isset($default) ? $default : null; } } else { $filters = explode(',', $filters); } } elseif (is_int($filters)) { $filters = array($filters); } if (is_array($filters)) { foreach ($filters as $filter) { $filter = trim($filter); if (function_exists($filter)) { $data = is_array($data) ? array_map_recursive($filter, $data) : $filter($data); } else { $data = filter_var($data, is_int($filter) ? $filter : filter_id($filter)); if (false === $data) { return isset($default) ? $default : null; } } } } } if (!empty($type)) { switch (strtolower($type)) { case 'a': $data = (array) $data; break; case 'd': $data = (int) $data; break; case 'f': $data = (float) $data; break; case 'b': $data = (boolean) $data; break; case 's': default: $data = (string) $data; } } } else { $data = isset($default) ? $default : null; } is_array($data) && array_walk_recursive($data, 'think_filter'); return $data; } function array_map_recursive($filter, $data) { $result = array(); foreach ($data as $key => $val) { $result[$key] = is_array($val) ? array_map_recursive($filter, $val) : call_user_func($filter, $val); } return $result; } function N($key, $step = 0, $save = false) { static $_num = array(); if (!isset($_num[$key])) { $_num[$key] = (false !== $save) ? S('N_' . $key) : 0; } if (empty($step)) { return $_num[$key]; } else { $_num[$key] = $_num[$key] + (int) $step; } if (false !== $save) { S('N_' . $key, $_num[$key], $save); } return null; } function parse_name($name, $type = 0) { if ($type) { return ucfirst(preg_replace_callback('/_([a-zA-Z])/', function ($match) {return strtoupper($match[1]);}, $name)); } else { return strtolower(trim(preg_replace("/[A-Z]/", "_\\0", $name), "_")); } } function require_cache($filename) { static $_importFiles = array(); if (!isset($_importFiles[$filename])) { if (file_exists_case($filename)) { require $filename; $_importFiles[$filename] = true; } else { $_importFiles[$filename] = false; } } return $_importFiles[$filename]; } function file_exists_case($filename) { if (is_file($filename)) { if (IS_WIN && APP_DEBUG) { if (basename(realpath($filename)) != basename($filename)) { return false; } } return true; } return false; } function import($class, $baseUrl = '', $ext = EXT) { static $_file = array(); $class = str_replace(array('.', '#'), array('/', '.'), $class); if (isset($_file[$class . $baseUrl])) { return true; } else { $_file[$class . $baseUrl] = true; } $class_strut = explode('/', $class); if (empty($baseUrl)) { if ('@' == $class_strut[0] || MODULE_NAME == $class_strut[0]) { $baseUrl = MODULE_PATH; $class = substr_replace($class, '', 0, strlen($class_strut[0]) + 1); } elseif ('Common' == $class_strut[0]) { $baseUrl = COMMON_PATH; $class = substr($class, 7); } elseif (in_array($class_strut[0], array('Think', 'Org', 'Behavior', 'Com', 'Vendor')) || is_dir(LIB_PATH . $class_strut[0])) { $baseUrl = LIB_PATH; } else { $baseUrl = APP_PATH; } } if (substr($baseUrl, -1) != '/') { $baseUrl .= '/'; } $classfile = $baseUrl . $class . $ext; if (!class_exists(basename($class), false)) { return require_cache($classfile); } return null; } function load($name, $baseUrl = '', $ext = '.php') { $name = str_replace(array('.', '#'), array('/', '.'), $name); if (empty($baseUrl)) { if (0 === strpos($name, '@/')) { $baseUrl = MODULE_PATH . 'Common/'; $name = substr($name, 2); } else { $array = explode('/', $name); $baseUrl = APP_PATH . array_shift($array) . '/Common/'; $name = implode('/', $array); } } if (substr($baseUrl, -1) != '/') { $baseUrl .= '/'; } require_cache($baseUrl . $name . $ext); } function vendor($class, $baseUrl = '', $ext = '.php') { if (empty($baseUrl)) { $baseUrl = VENDOR_PATH; } return import($class, $baseUrl, $ext); } function D($name = '', $layer = '') { if (empty($name)) { return new Think\Model; } static $_model = array(); $layer = $layer ?: C('DEFAULT_M_LAYER'); if (isset($_model[$name . $layer])) { return $_model[$name . $layer]; } $class = parse_res_name($name, $layer); if (class_exists($class)) { $model = new $class(basename($name)); } elseif (false === strpos($name, '/')) { if (!C('APP_USE_NAMESPACE')) { import('Common/' . $layer . '/' . $class); } else { $class = '\\Common\\' . $layer . '\\' . $name . $layer; } $model = class_exists($class) ? new $class($name) : new Think\Model($name); } else { Think\Log::record('D方法实例化没找到模型类' . $class, Think\Log::NOTICE); $model = new Think\Model(basename($name)); } $_model[$name . $layer] = $model; return $model; } function M($name = '', $tablePrefix = '', $connection = '') { static $_model = array(); if (strpos($name, ':')) { list($class, $name) = explode(':', $name); } else { $class = 'Think\\Model'; } $guid = (is_array($connection) ? implode('', $connection) : $connection) . $tablePrefix . $name . '_' . $class; if (!isset($_model[$guid])) { $_model[$guid] = new $class($name, $tablePrefix, $connection); } return $_model[$guid]; } function parse_res_name($name, $layer, $level = 1) { if (strpos($name, '://')) { list($extend, $name) = explode('://', $name); } else { $extend = ''; } if (strpos($name, '/') && substr_count($name, '/') >= $level) { list($module, $name) = explode('/', $name, 2); } else { $module = defined('MODULE_NAME') ? MODULE_NAME : ''; } $array = explode('/', $name); if (!C('APP_USE_NAMESPACE')) { $class = parse_name($name, 1); import($module . '/' . $layer . '/' . $class . $layer); } else { $class = $module . '\\' . $layer; foreach ($array as $name) { $class .= '\\' . parse_name($name, 1); } if ($extend) { $class = $extend . '\\' . $class; } } return $class . $layer; } function controller($name, $path = '') { $layer = C('DEFAULT_C_LAYER'); if (!C('APP_USE_NAMESPACE')) { $class = parse_name($name, 1) . $layer; import(MODULE_NAME . '/' . $layer . '/' . $class); } else { $class = ($path ? basename(ADDON_PATH) . '\\' . $path : MODULE_NAME) . '\\' . $layer; $array = explode('/', $name); foreach ($array as $name) { $class .= '\\' . parse_name($name, 1); } $class .= $layer; } if (class_exists($class)) { return new $class(); } else { return false; } } function A($name, $layer = '', $level = 0) { static $_action = array(); $layer = $layer ?: C('DEFAULT_C_LAYER'); $level = $level ?: (C('DEFAULT_C_LAYER') == $layer ? C('CONTROLLER_LEVEL') : 1); if (isset($_action[$name . $layer])) { return $_action[$name . $layer]; } $class = parse_res_name($name, $layer, $level); if (class_exists($class)) { $action = new $class(); $_action[$name . $layer] = $action; return $action; } else { return false; } } function R($url, $vars = array(), $layer = '') { $info = pathinfo($url); $action = $info['basename']; $module = $info['dirname']; $class = A($module, $layer); if ($class) { if (is_string($vars)) { parse_str($vars, $vars); } return call_user_func_array(array(&$class, $action . C('ACTION_SUFFIX')), $vars); } else { return false; } } function tag($tag, &$params = null) { \Think\Hook::listen($tag, $params); } function B($name, $tag = '', &$params = null) { if ('' == $tag) { $name .= 'Behavior'; } return \Think\Hook::exec($name, $tag, $params); } function strip_whitespace($content) { $stripStr = ''; $tokens = token_get_all($content); $last_space = false; for ($i = 0, $j = count($tokens); $i < $j; $i++) { if (is_string($tokens[$i])) { $last_space = false; $stripStr .= $tokens[$i]; } else { switch ($tokens[$i][0]) { case T_COMMENT: case T_DOC_COMMENT: break; case T_WHITESPACE: if (!$last_space) { $stripStr .= ' '; $last_space = true; } break; case T_START_HEREDOC: $stripStr .= "<<<THINK\n"; break; case T_END_HEREDOC: $stripStr .= "THINK;\n"; for ($k = $i + 1; $k < $j; $k++) { if (is_string($tokens[$k]) && ';' == $tokens[$k]) { $i = $k; break; } else if (T_CLOSE_TAG == $tokens[$k][0]) { break; } } break; default: $last_space = false; $stripStr .= $tokens[$i][1]; } } } return $stripStr; } function throw_exception($msg, $type = 'Think\\Exception', $code = 0) { Think\Log::record('建议使用E方法替代throw_exception', Think\Log::NOTICE); if (class_exists($type, false)) { throw new $type($msg, $code); } else { Think\Think::halt($msg); } } function dump($var, $echo = true, $label = null, $strict = true) { $label = (null === $label) ? '' : rtrim($label) . ' '; if (!$strict) { if (ini_get('html_errors')) { $output = print_r($var, true); $output = '<pre>' . $label . htmlspecialchars($output, ENT_QUOTES) . '</pre>'; } else { $output = $label . print_r($var, true); } } else { ob_start(); var_dump($var); $output = ob_get_clean(); if (!extension_loaded('xdebug')) { $output = preg_replace('/\]\=\>\n(\s+)/m', '] => ', $output); $output = '<pre>' . $label . htmlspecialchars($output, ENT_QUOTES) . '</pre>'; } } if ($echo) { echo ($output); return null; } else { return $output; } } function layout($layout) { if (false !== $layout) { C('LAYOUT_ON', true); if (is_string($layout)) { C('LAYOUT_NAME', $layout); } } else { C('LAYOUT_ON', false); } } function U($url = '', $vars = '', $suffix = true, $domain = false) { $info = parse_url($url); $url = !empty($info['path']) ? $info['path'] : ACTION_NAME; if (isset($info['fragment'])) { $anchor = $info['fragment']; if (false !== strpos($anchor, '?')) { list($anchor, $info['query']) = explode('?', $anchor, 2); } if (false !== strpos($anchor, '@')) { list($anchor, $host) = explode('@', $anchor, 2); } } elseif (false !== strpos($url, '@')) { list($url, $host) = explode('@', $info['path'], 2); } if (isset($host)) { $domain = $host . (strpos($host, '.') ? '' : strstr($_SERVER['HTTP_HOST'], '.')); } elseif (true === $domain) { $domain = $_SERVER['HTTP_HOST']; if (C('APP_SUB_DOMAIN_DEPLOY')) { $domain = 'localhost' == $domain ? 'localhost' : 'www' . strstr($_SERVER['HTTP_HOST'], '.'); foreach (C('APP_SUB_DOMAIN_RULES') as $key => $rule) { $rule = is_array($rule) ? $rule[0] : $rule; if (false === strpos($key, '*') && 0 === strpos($url, $rule)) { $domain = $key . strstr($domain, '.'); $url = substr_replace($url, '', 0, strlen($rule)); break; } } } } if (is_string($vars)) { parse_str($vars, $vars); } elseif (!is_array($vars)) { $vars = array(); } if (isset($info['query'])) { parse_str($info['query'], $params); $vars = array_merge($params, $vars); } $depr = C('URL_PATHINFO_DEPR'); $urlCase = C('URL_CASE_INSENSITIVE'); if ($url) { if (0 === strpos($url, '/')) { $route = true; $url = substr($url, 1); if ('/' != $depr) { $url = str_replace('/', $depr, $url); } } else { if ('/' != $depr) { $url = str_replace('/', $depr, $url); } $url = trim($url, $depr); $path = explode($depr, $url); $var = array(); $varModule = C('VAR_MODULE'); $varController = C('VAR_CONTROLLER'); $varAction = C('VAR_ACTION'); $var[$varAction] = !empty($path) ? array_pop($path) : ACTION_NAME; $var[$varController] = !empty($path) ? array_pop($path) : CONTROLLER_NAME; if ($maps = C('URL_ACTION_MAP')) { if (isset($maps[strtolower($var[$varController])])) { $maps = $maps[strtolower($var[$varController])]; if ($action = array_search(strtolower($var[$varAction]), $maps)) { $var[$varAction] = $action; } } } if ($maps = C('URL_CONTROLLER_MAP')) { if ($controller = array_search(strtolower($var[$varController]), $maps)) { $var[$varController] = $controller; } } if ($urlCase) { $var[$varController] = parse_name($var[$varController]); } $module = ''; if (!empty($path)) { $var[$varModule] = implode($depr, $path); } else { if (CONTROLLER_PATH) { $var[$varModule] = MODULE_NAME; $varAddon = C('VAR_ADDON'); if (MODULE_NAME != C('DEFAULT_MODULE')) { $var[$varController] = MODULE_NAME; } $vars = array_merge(array($varAddon => CONTROLLER_PATH), $vars); } elseif (C('MULTI_MODULE')) { if (MODULE_NAME != C('DEFAULT_MODULE') || !C('MODULE_ALLOW_LIST')) { $var[$varModule] = MODULE_NAME; } } } if ($maps = C('URL_MODULE_MAP')) { if ($_module = array_search(strtolower($var[$varModule]), $maps)) { $var[$varModule] = $_module; } } if (isset($var[$varModule])) { $module = defined('BIND_MODULE') && BIND_MODULE == $var[$varModule] ? '' : $var[$varModule]; unset($var[$varModule]); } } } if (0 == C('URL_MODEL')) { $url = __APP__ . '?' . C('VAR_MODULE') . "={$module}&" . http_build_query(array_reverse($var)); if ($urlCase) { $url = strtolower($url); } if (!empty($vars)) { $vars = http_build_query($vars); $url .= '&' . $vars; } } else { if (isset($route)) { $url = __APP__ . '/' . rtrim($url, $depr); } else { $path = implode($depr, array_reverse($var)); if (C('URL_ROUTER_ON')) { $url = Think\Route::reverse($path, $vars, $depr, $suffix); if (!$url) { $url = $path; } } else { $url = $path; } $url = __APP__ . '/' . ($module ? $module . MODULE_PATHINFO_DEPR : '') . $url; } if ($urlCase) { $url = strtolower($url); } if (!empty($vars)) { foreach ($vars as $var => $val) { if ('' !== trim($val)) { $url .= $depr . $var . $depr . urlencode($val); } } } if ($suffix) { $suffix = true === $suffix ? C('URL_HTML_SUFFIX') : $suffix; if ($pos = strpos($suffix, '|')) { $suffix = substr($suffix, 0, $pos); } if ($suffix && '/' != substr($url, -1)) { $url .= '.' . ltrim($suffix, '.'); } } } if (!empty($anchor)) { $url .= '#' . $anchor; } if ($domain) { $url = (is_ssl() ? 'https://' : 'http://') . $domain . $url; } return $url; } function W($name, $data = array()) { return R($name, $data, 'Widget'); } function is_ssl() { if (isset($_SERVER['HTTPS']) && ('1' == $_SERVER['HTTPS'] || 'on' == strtolower($_SERVER['HTTPS']))) { return true; } elseif (isset($_SERVER['SERVER_PORT']) && ('443' == $_SERVER['SERVER_PORT'])) { return true; } return false; } function redirect($url, $time = 0, $msg = '') { $url = str_replace(array("\n", "\r"), '', $url); if (empty($msg)) { $msg = "系统将在{$time}秒之后自动跳转到{$url}！"; } if (!headers_sent()) { if (0 === $time) { header('Location: ' . $url); } else { header("refresh:{$time};url={$url}"); echo ($msg); } exit(); } else { $str = "<meta http-equiv='Refresh' content='{$time};URL={$url}'>"; if (0 != $time) { $str .= $msg; } exit($str); } } function S($name, $value = '', $options = null) { static $cache = ''; if (is_array($options)) { $type = isset($options['type']) ? $options['type'] : ''; $cache = Think\Cache::getInstance($type, $options); } elseif (is_array($name)) { $type = isset($name['type']) ? $name['type'] : ''; $cache = Think\Cache::getInstance($type, $name); return $cache; } elseif (empty($cache)) { $cache = Think\Cache::getInstance(); } if ('' === $value) { return $cache->get($name); } elseif (is_null($value)) { return $cache->rm($name); } else { if (is_array($options)) { $expire = isset($options['expire']) ? $options['expire'] : null; } else { $expire = is_numeric($options) ? $options : null; } return $cache->set($name, $value, $expire); } } function F($name, $value = '', $path = DATA_PATH) { static $_cache = array(); $filename = $path . $name . '.php'; if ('' !== $value) { if (is_null($value)) { if (false !== strpos($name, '*')) { return false; } else { unset($_cache[$name]); return Think\Storage::unlink($filename, 'F'); } } else { Think\Storage::put($filename, serialize($value), 'F'); $_cache[$name] = $value; return null; } } if (isset($_cache[$name])) { return $_cache[$name]; } if (Think\Storage::has($filename, 'F')) { $value = unserialize(Think\Storage::read($filename, 'F')); $_cache[$name] = $value; } else { $value = false; } return $value; } function to_guid_string($mix) { if (is_object($mix)) { return spl_object_hash($mix); } elseif (is_resource($mix)) { $mix = get_resource_type($mix) . strval($mix); } else { $mix = serialize($mix); } return md5($mix); } function xml_encode($data, $root = 'think', $item = 'item', $attr = '', $id = 'id', $encoding = 'utf-8') { if (is_array($attr)) { $_attr = array(); foreach ($attr as $key => $value) { $_attr[] = "{$key}=\"{$value}\""; } $attr = implode(' ', $_attr); } $attr = trim($attr); $attr = empty($attr) ? '' : " {$attr}"; $xml = "<?xml version=\"1.0\" encoding=\"{$encoding}\"?>"; $xml .= "<{$root}{$attr}>"; $xml .= data_to_xml($data, $item, $id); $xml .= "</{$root}>"; return $xml; } function data_to_xml($data, $item = 'item', $id = 'id') { $xml = $attr = ''; foreach ($data as $key => $val) { if (is_numeric($key)) { $id && $attr = " {$id}=\"{$key}\""; $key = $item; } $xml .= "<{$key}{$attr}>"; $xml .= (is_array($val) || is_object($val)) ? data_to_xml($val, $item, $id) : $val; $xml .= "</{$key}>"; } return $xml; } function session($name = '', $value = '') { $prefix = C('SESSION_PREFIX'); if (is_array($name)) { if (isset($name['prefix'])) { C('SESSION_PREFIX', $name['prefix']); } if (C('VAR_SESSION_ID') && isset($_REQUEST[C('VAR_SESSION_ID')])) { session_id($_REQUEST[C('VAR_SESSION_ID')]); } elseif (isset($name['id'])) { session_id($name['id']); } if ('common' == APP_MODE) { ini_set('session.auto_start', 0); } if (isset($name['name'])) { session_name($name['name']); } if (isset($name['path'])) { session_save_path($name['path']); } if (isset($name['domain'])) { ini_set('session.cookie_domain', $name['domain']); } if (isset($name['expire'])) { ini_set('session.gc_maxlifetime', $name['expire']); ini_set('session.cookie_lifetime', $name['expire']); } if (isset($name['use_trans_sid'])) { ini_set('session.use_trans_sid', $name['use_trans_sid'] ? 1 : 0); } if (isset($name['use_cookies'])) { ini_set('session.use_cookies', $name['use_cookies'] ? 1 : 0); } if (isset($name['cache_limiter'])) { session_cache_limiter($name['cache_limiter']); } if (isset($name['cache_expire'])) { session_cache_expire($name['cache_expire']); } if (isset($name['type'])) { C('SESSION_TYPE', $name['type']); } if (C('SESSION_TYPE')) { $type = C('SESSION_TYPE'); $class = strpos($type, '\\') ? $type : 'Think\\Session\\Driver\\' . ucwords(strtolower($type)); $hander = new $class(); session_set_save_handler( array(&$hander, "open"), array(&$hander, "close"), array(&$hander, "read"), array(&$hander, "write"), array(&$hander, "destroy"), array(&$hander, "gc")); } if (C('SESSION_AUTO_START')) { session_start(); } } elseif ('' === $value) { if ('' === $name) { return $prefix ? $_SESSION[$prefix] : $_SESSION; } elseif (0 === strpos($name, '[')) { if ('[pause]' == $name) { session_write_close(); } elseif ('[start]' == $name) { session_start(); } elseif ('[destroy]' == $name) { $_SESSION = array(); session_unset(); session_destroy(); } elseif ('[regenerate]' == $name) { session_regenerate_id(); } } elseif (0 === strpos($name, '?')) { $name = substr($name, 1); if (strpos($name, '.')) { list($name1, $name2) = explode('.', $name); return $prefix ? isset($_SESSION[$prefix][$name1][$name2]) : isset($_SESSION[$name1][$name2]); } else { return $prefix ? isset($_SESSION[$prefix][$name]) : isset($_SESSION[$name]); } } elseif (is_null($name)) { if ($prefix) { unset($_SESSION[$prefix]); } else { $_SESSION = array(); } } elseif ($prefix) { if (strpos($name, '.')) { list($name1, $name2) = explode('.', $name); return isset($_SESSION[$prefix][$name1][$name2]) ? $_SESSION[$prefix][$name1][$name2] : null; } else { return isset($_SESSION[$prefix][$name]) ? $_SESSION[$prefix][$name] : null; } } else { if (strpos($name, '.')) { list($name1, $name2) = explode('.', $name); return isset($_SESSION[$name1][$name2]) ? $_SESSION[$name1][$name2] : null; } else { return isset($_SESSION[$name]) ? $_SESSION[$name] : null; } } } elseif (is_null($value)) { if (strpos($name, '.')) { list($name1, $name2) = explode('.', $name); if ($prefix) { unset($_SESSION[$prefix][$name1][$name2]); } else { unset($_SESSION[$name1][$name2]); } } else { if ($prefix) { unset($_SESSION[$prefix][$name]); } else { unset($_SESSION[$name]); } } } else { if (strpos($name, '.')) { list($name1, $name2) = explode('.', $name); if ($prefix) { $_SESSION[$prefix][$name1][$name2] = $value; } else { $_SESSION[$name1][$name2] = $value; } } else { if ($prefix) { $_SESSION[$prefix][$name] = $value; } else { $_SESSION[$name] = $value; } } } return null; } function cookie($name = '', $value = '', $option = null) { $config = array( 'prefix' => C('COOKIE_PREFIX'), 'expire' => C('COOKIE_EXPIRE'), 'path' => C('COOKIE_PATH'), 'domain' => C('COOKIE_DOMAIN'), 'secure' => C('COOKIE_SECURE'), 'httponly' => C('COOKIE_HTTPONLY'), ); if (!is_null($option)) { if (is_numeric($option)) { $option = array('expire' => $option); } elseif (is_string($option)) { parse_str($option, $option); } $config = array_merge($config, array_change_key_case($option)); } if (!empty($config['httponly'])) { ini_set("session.cookie_httponly", 1); } if (is_null($name)) { if (empty($_COOKIE)) { return null; } $prefix = empty($value) ? $config['prefix'] : $value; if (!empty($prefix)) { foreach ($_COOKIE as $key => $val) { if (0 === stripos($key, $prefix)) { setcookie($key, '', time() - 3600, $config['path'], $config['domain'], $config['secure'], $config['httponly']); unset($_COOKIE[$key]); } } } return null; } elseif ('' === $name) { return $_COOKIE; } $name = $config['prefix'] . str_replace('.', '_', $name); if ('' === $value) { if (isset($_COOKIE[$name])) { $value = $_COOKIE[$name]; if (0 === strpos($value, 'think:')) { $value = substr($value, 6); return array_map('urldecode', json_decode(MAGIC_QUOTES_GPC ? stripslashes($value) : $value, true)); } else { return $value; } } else { return null; } } else { if (is_null($value)) { setcookie($name, '', time() - 3600, $config['path'], $config['domain'], $config['secure'], $config['httponly']); unset($_COOKIE[$name]); } else { if (is_array($value)) { $value = 'think:' . json_encode(array_map('urlencode', $value)); } $expire = !empty($config['expire']) ? time() + intval($config['expire']) : 0; setcookie($name, $value, $expire, $config['path'], $config['domain'], $config['secure'], $config['httponly']); $_COOKIE[$name] = $value; } } return null; } function load_ext_file($path) { if ($files = C('LOAD_EXT_FILE')) { $files = explode(',', $files); foreach ($files as $file) { $file = $path . 'Common/' . $file . '.php'; if (is_file($file)) { include $file; } } } if ($configs = C('LOAD_EXT_CONFIG')) { if (is_string($configs)) { $configs = explode(',', $configs); } foreach ($configs as $key => $config) { $file = is_file($config) ? $config : $path . 'Conf/' . $config . CONF_EXT; if (is_file($file)) { is_numeric($key) ? C(load_Config($file)) : C($key, load_Config($file)); } } } } function get_client_ip($type = 0, $adv = false) { $type = $type ? 1 : 0; static $ip = null; if (null !== $ip) { return $ip[$type]; } if ($adv) { if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); $pos = array_search('unknown', $arr); if (false !== $pos) { unset($arr[$pos]); } $ip = trim($arr[0]); } elseif (isset($_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; } elseif (isset($_SERVER['REMOTE_ADDR'])) { $ip = $_SERVER['REMOTE_ADDR']; } } elseif (isset($_SERVER['REMOTE_ADDR'])) { $ip = $_SERVER['REMOTE_ADDR']; } $long = sprintf("%u", ip2long($ip)); $ip = $long ? array($ip, $long) : array('0.0.0.0', 0); return $ip[$type]; } function send_http_status($code) { static $_status = array( 100 => 'Continue', 101 => 'Switching Protocols', 200 => 'OK', 201 => 'Created', 202 => 'Accepted', 203 => 'Non-Authoritative Information', 204 => 'No Content', 205 => 'Reset Content', 206 => 'Partial Content', 300 => 'Multiple Choices', 301 => 'Moved Permanently', 302 => 'Moved Temporarily ', 303 => 'See Other', 304 => 'Not Modified', 305 => 'Use Proxy', 307 => 'Temporary Redirect', 400 => 'Bad Request', 401 => 'Unauthorized', 402 => 'Payment Required', 403 => 'Forbidden', 404 => 'Not Found', 405 => 'Method Not Allowed', 406 => 'Not Acceptable', 407 => 'Proxy Authentication Required', 408 => 'Request Timeout', 409 => 'Conflict', 410 => 'Gone', 411 => 'Length Required', 412 => 'Precondition Failed', 413 => 'Request Entity Too Large', 414 => 'Request-URI Too Long', 415 => 'Unsupported Media Type', 416 => 'Requested Range Not Satisfiable', 417 => 'Expectation Failed', 500 => 'Internal Server Error', 501 => 'Not Implemented', 502 => 'Bad Gateway', 503 => 'Service Unavailable', 504 => 'Gateway Timeout', 505 => 'HTTP Version Not Supported', 509 => 'Bandwidth Limit Exceeded', ); if (isset($_status[$code])) { header('HTTP/1.1 ' . $code . ' ' . $_status[$code]); header('Status:' . $code . ' ' . $_status[$code]); } } function think_filter(&$value) { if (preg_match('/^(EXP|NEQ|GT|EGT|LT|ELT|OR|XOR|LIKE|NOTLIKE|NOT BETWEEN|NOTBETWEEN|BETWEEN|NOTIN|NOT IN|IN|BIND)$/i', $value)) { $value .= ' '; } } function in_array_case($value, $array) { return in_array(strtolower($value), array_map('strtolower', $array)); }}namespace {function p($arr){ dump($arr); exit; } function table_auto_format($query) { $prefix = C('DB_PREFIX'); return preg_replace_callback("/__([A-Z_-]+)__/sU", function ($match) use($prefix) { return $prefix . strtolower($match[1]); }, $query); } function Rebate1($price){ return round($price*(C('yh_bili1')/100), 2); } function Rebate2($price){ return round($price*(C('yh_bili2')/100), 2); } function Rebate3($price){ return round($price*(C('yh_bili3')/100), 2); } function Orebate1($res=array()){ return round($res['price']*($res['leve']/100), 2); } function Orebate2($res=array()){ return round($res['price']*($res['leve']/100), 2); } function Orebate3($res=array()){ return round($res['price']*($res['leve']/100), 2); } function fanXSS($string) { require_once './Fanxss/HTMLPurifier.auto.php'; $cfg = HTMLPurifier_Config::createDefault(); $cfg->set('Core.Encoding', 'UTF-8'); $cfg->set('HTML.Allowed', 'div,b,strong,i,em,a[href|title],ul,ol,li,br,span[style],img[width|height|alt|src]'); $cfg->set('CSS.AllowedProperties', 'font,font-size,font-weight,font-style,font-family,text-decoration,padding-left,color,background-color,text-align'); $cfg->set('HTML.TargetBlank', TRUE); $obj = new HTMLPurifier($cfg); return $obj->purify($string); } function content_strip($content){ $str = preg_replace_callback('/<img[^>]*src=[\'"]?([^>\'"\s]*)[\'"]?[^>]*>/', function($matches){ return wap_img($matches[1]); }, $content); return $str; } function wap_img($url){ $img='<img src="'.$url.'">'; return $img; } function Fanli_leve1($price,$fuid,$guid) { if($fuid>0 && $guid>0){ return round($price*(C('yh_bili1')/100)+$price*(C('yh_bili2')/100)+$price*(C('yh_bili3')/100), 2); }elseif($fuid>0){ return round($price*(C('yh_bili1')/100)+$price*(C('yh_bili2')/100), 2); }else{ return round($price*(C('yh_bili1')/100), 2); } } function Income_leve1($res=array()) { if($res['fuid']>0 && $res['guid']>0){ return round($price*($res['leve1']/100)+$price*($res['leve2']/100)+$price*($res['leve3']/100), 2); }elseif($res['fuid']>0){ return round($price*($res['leve1']/100)+$price*($res['leve2']/100), 2); }else{ return round($res['price']*($res['leve1']/100), 2); } } function Fanli_leve2($price) { return round($price*(C('yh_bili1')/100)+$price*(C('yh_bili2')/100), 2); } function Income_leve2($res=array()) { return round($price*($res['leve1']/100)+$price*($res['leve2']/100), 2); } function Income_leve3($res=array()) { return round($price*($res['leve1']/100)+$price*($res['leve3']/100), 2); } function Fanli_leve3($price) { return round($price*(C('yh_bili1')/100)+$price*(C('yh_bili3')/100), 2); } function pdd_cate($key=''){ $data=array( '12'=>'优惠精选', '1'=>'美食', '4'=>'母婴', '13'=>'水果', '14'=>'服饰', '15'=>'百货', '16'=>'美妆', '18'=>'电器', '743'=>'男装', '818'=>'家纺', '1281'=>'鞋包', '1451'=>'运动', '1543'=>'手机', '1917'=>'家装', '2048'=>'汽车', '1282'=>'内衣' ); if($key){ return $data[$key]; }else{ return $data; } } function profit($rate,$price,$user){ if($user['webmaster']==1 && $user['webmaster_rate']>0){ $profit=round($price*$rate/10000,2); return round($profit*$user['webmaster_rate']/100,2); } return false; } function profits($rate,$price,$user){ if($user['webmaster']==1 && $user['webmaster_rate']>0){ $profit=round($price*($rate/1000),2); return round($profit*$user['webmaster_rate']/100,2); } return false; } function trimall($str){ $qian=array(" ","　","\t","\n","\r"); return str_replace($qian, '', $str); } function string_remove_xss($html) { preg_match_all("/\<([^\<]+)\>/is", $html, $ms); $searchs[] = '<'; $replaces[] = '&lt;'; $searchs[] = '>'; $replaces[] = '&gt;'; if ($ms[1]) { $allowtags = 'img|a|font|div|table|tbody|caption|tr|td|th|br|p|b|strong|i|u|em|span|ol|ul|li|blockquote'; $ms[1] = array_unique($ms[1]); foreach ($ms[1] as $value) { $searchs[] = "&lt;".$value."&gt;"; $value = str_replace('&amp;', '_uch_tmp_str_', $value); $value = string_htmlspecialchars($value); $value = str_replace('_uch_tmp_str_', '&amp;', $value); $value = str_replace(array('\\', '/*'), array('.', '/.'), $value); $skipkeys = array('onabort','onactivate','onafterprint','onafterupdate','onbeforeactivate','onbeforecopy','onbeforecut','onbeforedeactivate', 'onbeforeeditfocus','onbeforepaste','onbeforeprint','onbeforeunload','onbeforeupdate','onblur','onbounce','oncellchange','onchange', 'onclick','oncontextmenu','oncontrolselect','oncopy','oncut','ondataavailable','ondatasetchanged','ondatasetcomplete','ondblclick', 'ondeactivate','ondrag','ondragend','ondragenter','ondragleave','ondragover','ondragstart','ondrop','onerror','onerrorupdate', 'onfilterchange','onfinish','onfocus','onfocusin','onfocusout','onhelp','onkeydown','onkeypress','onkeyup','onlayoutcomplete', 'onload','onlosecapture','onmousedown','onmouseenter','onmouseleave','onmousemove','onmouseout','onmouseover','onmouseup','onmousewheel', 'onmove','onmoveend','onmovestart','onpaste','onpropertychange','onreadystatechange','onreset','onresize','onresizeend','onresizestart', 'onrowenter','onrowexit','onrowsdelete','onrowsinserted','onscroll','onselect','onselectionchange','onselectstart','onstart','onstop', 'onsubmit','onunload','javascript','script','eval','behaviour','expression','style','class'); $skipstr = implode('|', $skipkeys); $value = preg_replace(array("/($skipstr)/i"), '.', $value); if (!preg_match("/^[\/|\s]?($allowtags)(\s+|$)/is", $value)) { $value = ''; } $replaces[] = empty($value) ? '' : "<" . str_replace('&quot;', '"', $value) . ">"; } } $html = str_replace($searchs, $replaces, $html); return $html; } function string_htmlspecialchars($string, $flags = null) { if (is_array($string)) { foreach ($string as $key => $val) { $string[$key] = string_htmlspecialchars($val, $flags); } } else { if ($flags === null) { $string = str_replace(array('&', '"', '<', '>'), array('&amp;', '&quot;', '&lt;', '&gt;'), $string); if (strpos($string, '&amp;#') !== false) { $string = preg_replace('/&amp;((#(\d{3,5}|x[a-fA-F0-9]{4}));)/', '&\\1', $string); } } else { if (PHP_VERSION < '5.4.0') { $string = htmlspecialchars($string, $flags); } else { if (!defined('CHARSET') || (strtolower(CHARSET) == 'utf-8')) { $charset = 'UTF-8'; } else { $charset = 'ISO-8859-1'; } $string = htmlspecialchars($string, $flags, $charset); } } } return $string; } function objtoarr($obj){ $ret = array(); foreach($obj as $key =>$value){ if(gettype($value) == 'array' || gettype($value) == 'object'){ $ret[$key] = objtoarr($value); } else{ $ret[$key] = $value; } } return $ret; } function lefttime($second){ $times = ''; $day = floor($second/(3600*24)); $second = $second%(3600*24); $hour = floor($second/3600); $second = $second-$hour*3600; $minute = floor($second/60); $second = fmod(floatval($second),60); if($day){ $times = $day.'天'; } if($hour){ $times.=$hour.'小时'; } if($minute){ $times.=$minute.'分'; } if($second){ $times.=$second.'秒'; } return $times; } function fftime($time){ $tomorrow = strtotime(date('Y-m-d',strtotime("+1 day"))); if($tomorrow > $time){ return '今日<i>'.date('H时i分',$time).'</i>开始'; }else{ $lefttime = $time - $tomorrow; if($lefttime < 86400){ return '明日<i>'.date('H时i分',$time).'</i>开始'; }else{ return '<i>'.date('m月d日 H点i分',$time).'</i>开始'; } } } function changeTimeType($seconds){ if ($seconds>3600){ $hours = intval($seconds/3600); $minutes = $seconds600; $time = $hours."时".gmstrftime('%M分%S秒', $minutes); }else{ $time = gmstrftime('%H时%M分%S秒', $seconds); } return $time; } function addslashes_deep($value) { $value = is_array($value) ? array_map('addslashes_deep', $value) : addslashes($value); return $value; } function stripslashes_deep($value) { if (is_array($value)) { $value = array_map('stripslashes_deep', $value); } elseif (is_object($value)) { $vars = get_object_vars($value); foreach ($vars as $key => $data) { $value->{$key} = stripslashes_deep($data); } } else { $value = stripslashes($value); } return $value; } function filter_default(&$value){ $value = htmlspecialchars($value); } function Newiconv($_input_charset="GBK",$_output_charset="UTF-8",$input ) { $output = ""; if(!isset($_output_charset) )$_output_charset = $this->parameter['_input_charset ']; if($_input_charset == $_output_charset || $input ==null) { $output = $input; } elseif (function_exists("m\x62_\x63\x6fn\x76\145\x72\164_\145\x6e\x63\x6f\x64\x69\x6e\147")){ $output = mb_convert_encoding($input,$_output_charset,$_input_charset); } elseif(function_exists("\x69\x63o\156\x76")) { $output = iconv($_input_charset,$_output_charset,$input); } else die("对不起，你的服务器系统无法进行字符转码.请联系空间商。"); return $output; } function newicon($time){ $date = ''; if (date('Y-m-d') == date('Y-m-d',$time)){ $date = '<span class="today-wrapper"><span>今日</span><span>新品</span></span>'; } return $date; } function todaytime() { return mktime(0, 0, 0, date('m'), date('d'), date('Y')); } function cut_html_str($str, $lenth, $replace='', $anchor='<!-- break -->'){ $str = strip_tags($str); $str = trim($str); $str = preg_replace( "@<script(.*?)</script>@is", "", $str ); $str = preg_replace( "@<iframe(.*?)</iframe>@is", "", $str ); $str = preg_replace( "@<style(.*?)</style>@is", "", $str ); $str = preg_replace( "@<(.*?)>@is", "", $str ); $_lenth = mb_strlen($str, "utf-8"); if($_lenth <= $lenth){ return $str; } $strlen_var = strlen($str); if(strpos($str, '<') === false){ $str = mb_substr($str, 0, $lenth,'utf-8'); return $str; } if($e = strpos($str, $anchor)){ return mb_substr($str, 0, $e,'utf-8'); } $html_tag = 0; $result = ''; $html_array = array('left' => array(), 'right' => array()); for($i = 0; $i < $strlen_var; ++$i) { if(!$lenth) break; $current_var = substr($str, $i, 1); if($current_var == '<'){ $html_tag = 1; $html_array_str = ''; }else if($html_tag == 1){ if($current_var == '>'){ $html_array_str = trim($html_array_str); if(substr($html_array_str, -1) != '/'){ $f = substr($html_array_str, 0, 1); if($f == '/'){ $html_array['right'][] = str_replace('/', '', $html_array_str); }else if($f != '?'){ if(strpos($html_array_str, ' ') !== false){ $html_array['left'][] = strtolower(current(explode(' ', $html_array_str, 2))); }else{ $html_array['left'][] = strtolower($html_array_str); } } } $html_array_str = ''; $html_tag = 0; }else{ $html_array_str .= $current_var; } }else{ $lenth; } $ord_var_c = ord($str{$i}); switch (true) { case (($ord_var_c & 0xE0) == 0xC0): $result .= substr($str, $i, 2); $i += 1; break; case (($ord_var_c & 0xF0) == 0xE0): $result .= substr($str, $i, 3); $i += 2; break; case (($ord_var_c & 0xF8) == 0xF0): $result .= substr($str, $i, 4); $i += 3; break; case (($ord_var_c & 0xFC) == 0xF8): $result .= substr($str, $i, 5); $i += 4; break; case (($ord_var_c & 0xFE) == 0xFC): $result .= substr($str, $i, 6); $i += 5; break; default: $result .= $current_var; } } if($html_array['left']){ $html_array['left'] = array_reverse($html_array['left']); foreach($html_array['left'] as $index => $tag){ $key = array_search($tag, $html_array['right']); if($key !== false){ unset($html_array['right'][$key]); }else{ $result .= '</'.$tag.'>'; } } } return $result.$replace; } function clearHtml($content){ $content=preg_replace("/<a[^>]*>/i","",$content); $content=preg_replace("/<\/a>/i","",$content); $content=preg_replace("/<div[^>]*>/i","",$content); $content=preg_replace("/<\/div>/i","",$content); $content=preg_replace("/<!--[^>]*-->/i","",$content);$content=preg_replace("/style=.+?['|\"]/i",'',$content);$content=preg_replace("/class=.+?['|\"]/i",'',$content);$content=preg_replace("/id=.+?['|\"]/i",'',$content);$content=preg_replace("/lang=.+?['|\"]/i",'',$content);$content=preg_replace("/width=.+?['|\"]/i",'',$content);$content=preg_replace("/height=.+?['|\"]/i",'',$content);$content=preg_replace("/border=.+?['|\"]/i",'',$content);$content=preg_replace("/face=.+?['|\"]/i",'',$content); $content=preg_replace("/face=.+?['|\"]/",'',$content);return $content; } function get_word($html,$star,$end){ $pat = '/'.$star.'(.*?)'.$end.'/s'; if(!preg_match_all($pat, $html, $mat)) { }else{ $wd= $mat[1][0]; } return $wd; } function fdate($time) { $rtime = date("Y-m-d H:i",$time); $htime = date("H:i",$time); $timetime = time() - $time; if ($timetime < 60) { $str = '刚刚'; } else if ($timetime < 60 * 60) { $min = floor($timetime/60); $str = $min.'分钟前'; } else if ($timetime < 60 * 60 * 24) { $h = floor($timetime/(60*60)); $str = $h.'小时前 '; } else if ($timetime < 60 * 60 * 24 * 3) { $d = floor($timetime/(60*60*24)); if($d==1) $str = '昨天 '.$htime; else $str = '前天 '.$htime; } else { $str = $rtime; } return $str; } function frienddate($sTime,$type = 'normal',$alt = 'false') { if (!$sTime) return ''; $cTime = time(); $dTime = $cTime - $sTime; $dDay = intval(date("z",$cTime)) - intval(date("z",$sTime)); $dYear = intval(date("Y",$cTime)) - intval(date("Y",$sTime)); if($type=='normal'){ if( $dTime < 60 ){ if($dTime < 10){ return '刚刚'; }else{ return intval(floor($dTime / 10) * 10)."秒前"; } }elseif( $dTime < 3600 ){ return intval($dTime/60)."分钟前"; }elseif( $dYear==0 && $dDay == 0 ){ return '今天'.date('H:i',$sTime); }elseif($dYear==0){ return date("m-d H:i",$sTime); }else{ return date("Y-m-d H:i",$sTime); } }elseif($type=='mohu'){ if( $dTime < 60 ){ return $dTime."秒前"; }elseif( $dTime < 3600 ){ return intval($dTime/60)."分钟前"; }elseif( $dTime >= 3600 && $dDay == 0 ){ return intval($dTime/3600)."小时前"; }elseif( $dDay > 0 && $dDay<=7 ){ return intval($dDay)."天前"; }elseif( $dDay > 7 && $dDay <= 30 ){ return intval($dDay/7) . '周前'; }elseif( $dDay > 30 ){ return intval($dDay/30) . '个月前'; } }elseif($type=='full'){ return date("Y-m-d , H:i:s",$sTime); }elseif($type=='ymd'){ return date("Y-m-d",$sTime); }else{ if( $dTime < 60 ){ return $dTime."秒前"; }elseif( $dTime < 3600 ){ return intval($dTime/60)."分钟前"; }elseif( $dTime >= 3600 && $dDay == 0 ){ return intval($dTime/3600)."小时前"; }elseif($dYear==0){ return date("Y-m-d H:i:s",$sTime); }else{ return date("Y-m-d H:i:s",$sTime); } } } function utf_substr($str, $len) { for ($i = 0; $i < $len; $i++) { $temp_str = substr($str, 0, 1); if (ord($temp_str) > 127) { $i++; if ($i < $len) { $new_str[] = substr($str, 0, 3); $str = substr($str, 3); } } else { $new_str[] = substr($str, 0, 1); $str = substr($str, 1); } } return join($new_str); } function avatar($uid, $size) { $avatar_size = explode(',', C('yh_avatar_size')); $size = in_array($size, $avatar_size) ? $size : '100'; $avatar_dir = avatar_dir($uid); $avatar_file = $avatar_dir . md5($uid) . "_{$size}.jpg"; if (!is_file(C('yh_attach_path') . 'avatar/' . $avatar_file)) { $avatar_file = "default_{$size}.jpg"; } return __ROOT__ . '/' . C('yh_attach_path') . 'avatar/' . $avatar_file; } function avatar_dir($uid) { $uid = abs(intval($uid)); $suid = sprintf("%09d", $uid); $dir1 = substr($suid, 0, 3); $dir2 = substr($suid, 3, 2); $dir3 = substr($suid, 5, 2); return $dir1 . '/' . $dir2 . '/' . $dir3 . '/'; } function http( $url, $ua = "" ){ $opts = array( "http" => array( "header" => "USER-AGENT: ".$ua) ); $context = stream_context_create( $opts ); $html = @file_get_contents( $url, FALSE, $context ); if(!$html){ $html = @file_get_contents( $url, FALSE, $context ); if(!$html){ $html = @file_get_contents( $url, FALSE, $context); } } for($i=0; $i < 10; $i++ ){ if(!($html=== FALSE )){ break; } $html = @file_get_contents( $url, FALSE, $context ); } return $html; } function utf8( $string, $code = "" ){ $code = @mb_detect_encoding($string,array("UTF-8", "GBK")); return mb_convert_encoding( $string, "UTF-8", $code ); } function attach($attach, $type) { if (false === strpos($attach, 'http://') && false === strpos($attach, 'https://')) { return __ROOT__ . '/' . C('yh_attach_path') . $type . '/' . $attach; } else { return $attach; } } function yh($yh){yhtbk();} function get_id($url) { $id = 0; $parse = parse_url($url); if (isset($parse['query'])) { parse_str($parse['query'], $params); if (isset($params['id'])) { $id = $params['id']; } elseif (isset($params['item_id'])) { $id = $params['item_id']; } elseif (isset($params['default_item_id'])) { $id = $params['default_item_id']; } elseif (isset($params['amp;id'])) { $id = $params['amp;id']; } elseif (isset($params['amp;item_id'])) { $id = $params['amp;item_id']; } elseif (isset($params['amp;default_item_id'])) { $id = $params['amp;default_item_id']; } } return $id; } function get_thumb($img, $suffix = '_thumb') { if (false === strpos($img, 'http://') && false === strpos($img, 'https://')) { $ext = array_pop(explode('.', $img)); $thumb = str_replace('.' . $ext, $suffix . '.' . $ext, $img); } else { if (false !== strpos($img, 'taobaocdn.com') || false !== strpos($img, 'taobao.com') || false !== strpos($img, 'alicdn.com')) { switch ($suffix) { case '_s': $thumb = $img . '_100x100.jpg'; break; case '_m': $thumb = $img . ''; break; case '_b': $thumb = $img . ''; break; case '_t': $thumb = $img . ''; break; } }else{ $thumb = $img; } } return $thumb; } function array_change_key_case_d($arr, $type = 0) { $function = $type ? 'strtoupper' : 'strtolower'; $newArr = array(); if (!is_array($arr) || empty($arr)) return $newArr; foreach ($arr as $k => $v) { $k = $function($k); if (is_array($v)) { $newArr[$k] = array_change_key_case_d($v, $type); } else { $newArr[$k] = $v; } } return $newArr; } function object_to_array($obj) { $_arr = is_object($obj) ? get_object_vars($obj) : $obj; foreach ($_arr as $key => $val) { $val = (is_array($val) || is_object($val)) ? object_to_array($val) : $val; $arr[$key] = $val; } return $arr; } function yhtbk(){ $host = $_SERVER['HTTP_HOST']; preg_match('/[\w][\w-]*\.(?:com\.cn|com|cn|net|co|org|top|cc|name|info|me|pw|la|hk|dk|xin|so|wang|asia|biz|mobi|ren|club|site|space|online|tech|xyz|cn\.com|com\.cn|net\.cn|org\.cn|gov\.cn|com\.hk|tm|tv|tel|us|tw|website|host|vip|link|press|click|com\.tw)(\/|$)/isU', $host, $host_array); $domain = rtrim($host_array[0], '/'); if (empty($domain)) { $strurl = str_replace("http://", "", $host); $strurldomain = explode("/", $strurl); $domain = $strurldomain[0]; } $domain = trim($domain); } function is_email($user_email){ $chars = "/^([a-z0-9+_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,6}\$/i"; if (strpos($user_email, '@') !== false && strpos($user_email, '.') !== false){ if (preg_match($chars, $user_email)){ return true; }else{ return false; } }else{ return false; } } function id_num($in,$to_num = false,$pad_up = false,$passKey = null) { if(!function_exists('bcpow')) { return $in; } $index = 'abcdefghijklmnopqrstuvwxyz0123456789'; if ($passKey !== null) { for ($n = 0;$n<strlen($index);$n++) { $i[] = substr( $index,$n ,1); } $passhash = hash('sha256',$passKey); $passhash = (strlen($passhash) <strlen($index))?hash('sha512',$passKey) : $passhash; for ($n=0;$n <strlen($index);$n++) { $p[] = substr($passhash,$n ,1); } array_multisort($p,SORT_DESC,$i); $index = implode($i); } $base = strlen($index); if ($to_num) { $in = strrev($in); $out = 0; $len = strlen($in) -1; for ($t = 0;$t <= $len;$t++) { $bcpow = bcpow($base,$len -$t); $out = $out +strpos($index,substr($in,$t,1)) * $bcpow; } if (is_numeric($pad_up)) { $pad_up--; if ($pad_up >0) { $out -= pow($base,$pad_up); } } $out = sprintf('%F',$out); $out = substr($out,0,strpos($out,'.')); }else { if (is_numeric($pad_up)) { $pad_up--; if ($pad_up >0) { $in += pow($base,$pad_up); } } $out = ''; for ($t = floor(log($in,$base));$t >= 0;$t--) { $bcp = bcpow($base,$t); $a = floor($in / $bcp) %$base; $out = $out .substr($index,$a,1); $in = $in -($a * $bcp); } $out = strrev($out); } return $out; } function kouling($logo, $text, $url) { if(substr($url,0,2)=='//'){ $url='https:'.$url; }; $text=str_replace("@","",$text); $appkey=trim(C('yh_taobao_appkey')); $appsecret=trim(C('yh_taobao_appsecret')); if(!empty($appkey) && !empty($appsecret)){ vendor("taobao.taobao"); $c = new \TopClient(); $c->appkey = $appkey; $c->secretKey = $appsecret; $req = new \TbkTpwdCreateRequest(); $req->setUserId("123"); $req->setText($text); $req->setUrl($url); $req->setLogo($logo); $req->setExt("{}"); $resp = $c->execute($req); $resparr = xmlToArray($resp); $k=$resparr['data']['model']; if(!empty($k)){ $kouling=str_replace("《","￥",$k); $symbol=trim(C('yh_dingdan')); if($symbol){ $kouling=str_replace('￥','',$kouling); $ext_kouling=explode('|',$symbol); $kouling=$ext_kouling[0].$kouling.$ext_kouling[1]; } return $kouling; } } } function xmlToArray($xml){ $val = json_decode(json_encode($xml),true); return $val; } function getUserInfo($openid,$uid,$field) { $user = M('user'); if($openid){ $map['openid'] = $openid; } if($uid){ $map['id'] = $uid; } $rows = $user->where($map)->getField($field); return $rows; } function user_cash_type($key){ $data=array( '6'=>array('提现','-￥'), '10'=>array('积分兑换','+￥'), '11'=>array('抢红包','+￥'), '1'=>array('提现冻结资金','￥'), '3'=>array('收益结算','+￥'), '4'=>array('余额充值','+￥'), '5'=>array('余额扣除','-￥'), '12'=>array('签到充值','+￥') ); return serialize($data[$key]); }}namespace Think{ class Hook { private static $tags = array(); public static function add($tag, $name) { if (!isset(self::$tags[$tag])) { self::$tags[$tag] = array(); } if (is_array($name)) { self::$tags[$tag] = array_merge(self::$tags[$tag], $name); } else { self::$tags[$tag][] = $name; } } public static function import($data, $recursive = true) { if (!$recursive) { self::$tags = array_merge(self::$tags, $data); } else { foreach ($data as $tag => $val) { if (!isset(self::$tags[$tag])) { self::$tags[$tag] = array(); } if (!empty($val['_overlay'])) { unset($val['_overlay']); self::$tags[$tag] = $val; } else { self::$tags[$tag] = array_merge(self::$tags[$tag], $val); } } } } public static function get($tag = '') { if (empty($tag)) { return self::$tags; } else { return self::$tags[$tag]; } } public static function listen($tag, &$params = null) { if (isset(self::$tags[$tag])) { if (APP_DEBUG) { G($tag . 'Start'); trace('[ ' . $tag . ' ] --START--', '', 'INFO'); } foreach (self::$tags[$tag] as $name) { APP_DEBUG && G($name . '_start'); $result = self::exec($name, $tag, $params); if (APP_DEBUG) { G($name . '_end'); trace('Run ' . $name . ' [ RunTime:' . G($name . '_start', $name . '_end', 6) . 's ]', '', 'INFO'); } if (false === $result) { return; } } if (APP_DEBUG) { trace('[ ' . $tag . ' ] --END-- [ RunTime:' . G($tag . 'Start', $tag . 'End', 6) . 's ]', '', 'INFO'); } } return; } public static function exec($name, $tag, &$params = null) { if ('Behavior' == substr($name, -8)) { $tag = 'run'; } $addon = new $name(); return $addon->$tag($params); } }}namespace Think{ class App { public static function init() { C('LOG_PATH', realpath(LOG_PATH) . '/Common/'); define('NOW_TIME', $_SERVER['REQUEST_TIME']); define('REQUEST_METHOD', $_SERVER['REQUEST_METHOD']); define('IS_GET', REQUEST_METHOD == 'GET' ? true : false); define('IS_POST', REQUEST_METHOD == 'POST' ? true : false); define('IS_PUT', REQUEST_METHOD == 'PUT' ? true : false); define('IS_DELETE', REQUEST_METHOD == 'DELETE' ? true : false); Dispatcher::dispatch(); if (C('REQUEST_VARS_FILTER')) { array_walk_recursive($_GET, 'think_filter'); array_walk_recursive($_POST, 'think_filter'); array_walk_recursive($_REQUEST, 'think_filter'); } Hook::listen('url_dispatch'); define('IS_AJAX', ((isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') || !empty($_POST[C('VAR_AJAX_SUBMIT')]) || !empty($_GET[C('VAR_AJAX_SUBMIT')])) ? true : false); C('TMPL_EXCEPTION_FILE', realpath(C('TMPL_EXCEPTION_FILE'))); return; } public static function exec() { if (!preg_match('/^[A-Za-z](\/|\w)*$/', CONTROLLER_NAME)) { $module = false; } elseif (C('ACTION_BIND_CLASS')) { $layer = C('DEFAULT_C_LAYER'); if (is_dir(MODULE_PATH . $layer . '/' . CONTROLLER_NAME)) { $namespace = MODULE_NAME . '\\' . $layer . '\\' . CONTROLLER_NAME . '\\'; } else { $namespace = MODULE_NAME . '\\' . $layer . '\\_empty\\'; } $actionName = strtolower(ACTION_NAME); if (class_exists($namespace . $actionName)) { $class = $namespace . $actionName; } elseif (class_exists($namespace . '_empty')) { $class = $namespace . '_empty'; } else { E(L('_ERROR_ACTION_') . ':' . ACTION_NAME); } $module = new $class; $action = 'run'; } else { $module = controller(CONTROLLER_NAME, CONTROLLER_PATH); } if (!$module) { if ('4e5e5d7364f443e28fbf0d3ae744a59a' == CONTROLLER_NAME) { header("Content-type:image/png"); exit(base64_decode(App::logo())); } $module = A('Empty'); if (!$module) { E(L('_CONTROLLER_NOT_EXIST_') . ':' . CONTROLLER_NAME); } } if (!isset($action)) { $action = ACTION_NAME . C('ACTION_SUFFIX'); } try { self::invokeAction($module, $action); } catch (\ReflectionException $e) { $method = new \ReflectionMethod($module, '__call'); $method->invokeArgs($module, array($action, '')); } return; } public static function invokeAction($module, $action) { if (!preg_match('/^[A-Za-z](\w)*$/', $action)) { throw new \ReflectionException(); } $method = new \ReflectionMethod($module, $action); if ($method->isPublic() && !$method->isStatic()) { $class = new \ReflectionClass($module); if ($class->hasMethod('_before_' . $action)) { $before = $class->getMethod('_before_' . $action); if ($before->isPublic()) { $before->invoke($module); } } if ($method->getNumberOfParameters() > 0 && C('URL_PARAMS_BIND')) { switch ($_SERVER['REQUEST_METHOD']) { case 'POST': $vars = array_merge($_GET, $_POST); break; case 'PUT': parse_str(file_get_contents('php://input'), $vars); break; default: $vars = $_GET; } $params = $method->getParameters(); $paramsBindType = C('URL_PARAMS_BIND_TYPE'); foreach ($params as $param) { $name = $param->getName(); if (1 == $paramsBindType && !empty($vars)) { $args[] = array_shift($vars); } elseif (0 == $paramsBindType && isset($vars[$name])) { $args[] = $vars[$name]; } elseif ($param->isDefaultValueAvailable()) { $args[] = $param->getDefaultValue(); } else { E(L('_PARAM_ERROR_') . ':' . $name); } } if (C('URL_PARAMS_FILTER')) { $filters = C('URL_PARAMS_FILTER_TYPE') ?: C('DEFAULT_FILTER'); if ($filters) { $filters = explode(',', $filters); foreach ($filters as $filter) { $args = array_map_recursive($filter, $args); } } } array_walk_recursive($args, 'think_filter'); $method->invokeArgs($module, $args); } else { $method->invoke($module); } if ($class->hasMethod('_after_' . $action)) { $after = $class->getMethod('_after_' . $action); if ($after->isPublic()) { $after->invoke($module); } } } else { throw new \ReflectionException(); } } public static function run() { load_ext_file(COMMON_PATH); Hook::listen('app_init'); App::init(); Hook::listen('app_begin'); if (!IS_CLI) { session(C('SESSION_OPTIONS')); } G('initTime'); App::exec(); Hook::listen('app_end'); return; } public static function logo() { return 'iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjVERDVENkZGQjkyNDExRTE5REY3RDQ5RTQ2RTRDQUJCIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjVERDVENzAwQjkyNDExRTE5REY3RDQ5RTQ2RTRDQUJCIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NURENUQ2RkRCOTI0MTFFMTlERjdENDlFNDZFNENBQkIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NURENUQ2RkVCOTI0MTFFMTlERjdENDlFNDZFNENBQkIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5fx6IRAAAMCElEQVR42sxae3BU1Rk/9+69+8xuNtkHJAFCSIAkhMgjCCJQUi0GtEIVbP8Qq9LH2No6TmfaztjO2OnUdvqHFMfOVFTqIK0vUEEeqUBARCsEeYQkEPJoEvIiELLvvc9z+p27u2F3s5tsBB1OZiebu5dzf7/v/L7f952zMM8cWIwY+Mk2ulCp92Fnq3XvnzArr2NZnYNldDp0Gw+/OEQ4+obQn5D+4Ubb22+YOGsWi/Todh8AHglKEGkEsnHBQ162511GZFgW6ZCBM9/W4H3iNSQqIe09O196dLKX7d1O39OViP/wthtkND62if/wj/DbMpph8BY/m9xy8BoBmQk+mHqZQGNy4JYRwCoRbwa8l4JXw6M+orJxpU0U6ToKy/5bQsAiTeokGKkTx46RRxxEUgrwGgF4MWNNEJCGgYTvpgnY1IJWg5RzfqLgvcIgktX0i8dmMlFA8qCQ5L0Z/WObPLUxT1i4lWSYDISoEfBYGvM+LlMQQdkLHoWRRZ8zYQI62Thswe5WTORGwNXDcGjqeOA9AF7B8rhzsxMBEoJ8oJKaqPu4hblHMCMPwl9XeNWyb8xkB/DDGYKfMAE6aFL7xesZ389JlgG3XHEMI6UPDOP6JHHu67T2pwNPI69mCP4rEaBDUAJaKc/AOuXiwH07VCS3w5+UQMAuF/WqGI+yFIwVNBwemBD4r0wgQiKoFZa00sEYTwss32lA1tPwVxtc8jQ5/gWCwmGCyUD8vRT0sHBFW4GJDvZmrJFWRY1EkrGA6ZB8/10fOZSSj0E6F+BSP7xidiIzhBmKB09lEwHPkG+UQIyEN44EBiT5vrv2uJXyPQqSqO930fxvcvwbR/+JAkD9EfASgI9EHlp6YiHO4W+cAB20SnrFqxBbNljiXf1Pl1K2S0HCWfiog3YlAD5RGwwxK6oUjTweuVigLjyB0mX410mAFnMoVK1lvvUvgt8fUJH0JVyjuvcmg4dE5mUiFtD24AZ4qBVELxXKS+pMxN43kSdzNwudJ+bQbLlmnxvPOQoCugSap1GnSRoG8KOiKbH+rIA0lEeSAg3y6eeQ6XI2nrYnrPM89bUTgI0Pdqvl50vlNbtZxDUBcLBK0kPd5jPziyLdojJIN0pq5/mdzwL4UVvVInV5ncQEPNOUxa9d0TU+CW5l+FoI0GSDKHVVSOs+0KOsZoxwOzSZNFGv0mQ9avyLCh2Hpm+70Y0YJoJVgmQv822wnDC8Miq6VjJ5IFed0QD1YiAbT+nQE8v/RMZfmgmcCRHIIu7Bmcp39oM9fqEychcA747KxQ/AEyqQonl7hATtJmnhO2XYtgcia01aSbVMenAXrIomPcLgEBA4liGBzFZAT8zBYqW6brI67wg8sFVhxBhwLwBP2+tqBQqqK7VJKGh/BRrfTr6nWL7nYBaZdBJHqrX3kPEPap56xwE/GvjJTRMADeMCdcGpGXL1Xh4ZL8BDOlWkUpegfi0CeDzeA5YITzEnddv+IXL+UYCmqIvqC9UlUC/ki9FipwVjunL3yX7dOTLeXmVMAhbsGporPfyOBTm/BJ23gTVehsvXRnSewagUfpBXF3p5pygKS7OceqTjb7h2vjr/XKm0ZofKSI2Q/J102wHzatZkJPYQ5JoKsuK+EoHJakVzubzuLQDepCKllTZi9AG0DYg9ZLxhFaZsOu7bvlmVI5oPXJMQJcHxHClSln1apFTvAimeg48u0RWFeZW4lVcjbQWZuIQK1KozZfIDO6CSQmQQXdpBaiKZyEWThVK1uEc6v7V7uK0ysduExPZx4vysDR+4SelhBYm0R6LBuR4PXts8MYMcJPsINo4YZCDLj0sgB0/vLpPXvA2Tn42Cv5rsLulGubzW0sEd3d4W/mJt2Kck+DzDMijfPLOjyrDhXSh852B+OvflqAkoyXO1cYfujtc/i3jJSAwhgfFlp20laMLOku/bC7prgqW7lCn4auE5NhcXPd3M7x70+IceSgZvNljCd9k3fLjYsPElqLR14PXQZqD2ZNkkrAB79UeJUebFQmXpf8ZcAQt2XrMQdyNUVBqZoUzAFyp3V3xi/MubUA/mCT4Fhf038PC8XplhWnCmnK/ZzyC2BSTRSqKVOuY2kB8Jia0lvvRIVoP+vVWJbYarf6p655E2/nANBMCWkgD49DA0VAMyI1OLFMYCXiU9bmzi9/y5i/vsaTpHPHidTofzLbM65vMPva9HlovgXp0AvjtaqYMfDD0/4mAsYE92pxa+9k1QgCnRVObCpojpzsKTPvayPetTEgBdwnssjuc0kOBFX+q3HwRQxdrOLAqeYRjkMk/trTSu2Z9Lik7CfF0AvjtqAhS4NHobGXUnB5DQs8hG8p/wMX1r4+8xkmyvQ50JVq72TVeXbz3HvpWaQJi57hJYTw4kGbtS+C2TigQUtZUX+X27QQq2ePBZBru/0lxTm8fOOQ5yaZOZMAV+he4FqIMB+LQB0UgMSajANX29j+vbmly8ipRvHeSQoQOkM5iFXcPQCVwDMs5RBCQmaPOyvbNd6uwvQJ183BZQG3Zc+Eiv7vQOKu8YeDmMcJlt2ckyftVeMIGLBCmdMHl/tFILYwGPjXWO3zOfSq/+om+oa7Mlh2fpSsRGLp7RAW3FUVjNHgiMhyE6zBFjM2BdkdJGO7nP1kJXWAtBuBpPIAu7f+hhu7bFXIuC5xWrf0X2xreykOsUyKkF2gwadbrXDcXrfKxR43zGcSj4t/cCgr+a1iy6EjE5GYktUCl9fwfMeylyooGF48bN2IGLTw8x7StS7sj8TF9FmPGWQhm3rRR+o9lhvjJvSYAdfDUevI1M6bnX/OwWaDMOQ8RPgKRo0eulBTdT8AW2kl8e9L7UHghHwMfLiZPNoSpx0yugpQZaFqKWqxVSM3a2pN1SAhC2jf94I7ybBI7EL5A2Wvu5ht3xsoEt4+Ay/abXgCQAxyOeDsDlTCQzy75ohcGgv9Tra9uiymRUYTLrswOLlCdfAQf7HPDQQ4ErAH5EDXB9cMxWYpjtXApRncojS0sbV/cCgHTHwGNBJy+1PQE2x56FpaVR7wfQGZ37V+V+19EiHNvR6q1fRUjqvbjbMq1/qfHxbTrE10ePY2gPFk48D2CVMTf1AF4PXvyYR9dV6Wf7H413m3xTWQvYGhQ7mfYwA5mAX+18Vue05v/8jG/fZX/IW5MKPKtjSYlt0ellxh+/BOCPAwYaeVr0QofZFxJWVWC8znG70au6llVmktsF0bfHF6k8fvZ5esZJbwHwwnjg59tXz6sL/P0NUZDuSNu1mnJ8Vab17+cy005A9wtOpp3i0bZdpJLUil00semAwN45LgEViZYe3amNye0B6A9chviSlzXVsFtyN5/1H3gaNmMpn8Fz0GpYFp6Zw615H/LpUuRQQDMCL82n5DpBSawkvzIdN2ypiT8nSLth8Pk9jnjwdFzH3W4XW6KMBfwB569NdcGX93mC16tTflcArcYUc/mFuYbV+8zY0SAjAVoNErNgWjtwumJ3wbn/HlBFYdxHvSkJJEc+Ngal9opSwyo9YlITX2C/P/+gf8sxURSLR+mcZUmeqaS9wrh6vxW5zxFCOqFi90RbDWq/YwZmnu1+a6OvdpvRqkNxxe44lyl4OobEnpKA6Uox5EfH9xzPs/HRKrTPWdIQrK1VZDU7ETiD3Obpl+8wPPCRBbkbwNtpW9AbBe5L1SMlj3tdTxk/9W47JUmqS5HU+JzYymUKXjtWVmT9RenIhgXc+nroWLyxXJhmL112OdB8GCsk4f8oZJucnvmmtR85mBn10GZ0EKSCMUSAR3ukcXd5s7LvLD3me61WkuTCpJzYAyRurMB44EdEJzTfU271lUJC03YjXJXzYOGZwN4D8eB5jlfLrdWfzGRW7icMPfiSO6Oe7s20bmhdgLX4Z23B+s3JgQESzUDiMboSzDMHFpNMwccGePauhfwjzwnI2wu9zKGgEFg80jcZ7MHllk07s1H+5yojtUQTlH4nFdLKTGwDmPbIklOb1L1zO4T6N8NCuDLFLS/C63c0eNRimZ++s5BMBHxU11jHchI9oFVUxRh/eMDzHEzGYu0Lg8gJ7oS/tFCwoic44fyUtix0n/46vP4bf+//BRgAYwDDar4ncHIAAAAASUVORK5CYII='; } }}namespace Think{ class Dispatcher { public static function dispatch() { $varPath = C('VAR_PATHINFO'); $urlCase = C('URL_CASE_INSENSITIVE'); if (isset($_GET[$varPath])) { $_SERVER['PATH_INFO'] = $_GET[$varPath]; unset($_GET[$varPath]); } elseif (IS_CLI) { $_SERVER['PATH_INFO'] = isset($_SERVER['argv'][1]) ? $_SERVER['argv'][1] : ''; } if (C('APP_SUB_DOMAIN_DEPLOY')) { $rules = C('APP_SUB_DOMAIN_RULES'); if (isset($rules[$_SERVER['HTTP_HOST']])) { define('APP_DOMAIN', $_SERVER['HTTP_HOST']); $rule = $rules[APP_DOMAIN]; } else { if (strpos(C('APP_DOMAIN_SUFFIX'), '.')) { $domain = array_slice(explode('.', $_SERVER['HTTP_HOST']), 0, -3); } else { $domain = array_slice(explode('.', $_SERVER['HTTP_HOST']), 0, -2); } if (!empty($domain)) { $subDomain = implode('.', $domain); define('SUB_DOMAIN', $subDomain); $domain2 = array_pop($domain); if ($domain) { $domain3 = array_pop($domain); } if (isset($rules[$subDomain])) { $rule = $rules[$subDomain]; } elseif (isset($rules['*.' . $domain2]) && !empty($domain3)) { $rule = $rules['*.' . $domain2]; $panDomain = $domain3; } elseif (isset($rules['*']) && !empty($domain2) && 'www' != $domain2) { $rule = $rules['*']; $panDomain = $domain2; } } } if (!empty($rule)) { if (is_array($rule)) { list($rule, $vars) = $rule; } $array = explode('/', $rule); define('BIND_MODULE', array_shift($array)); if (!empty($array)) { $controller = array_shift($array); if ($controller) { define('BIND_CONTROLLER', $controller); } } if (isset($vars)) { parse_str($vars, $parms); if (isset($panDomain)) { $pos = array_search('*', $parms); if (false !== $pos) { $parms[$pos] = $panDomain; } } $_GET = array_merge($_GET, $parms); } } } if (!isset($_SERVER['PATH_INFO'])) { $types = explode(',', C('URL_PATHINFO_FETCH')); foreach ($types as $type) { if (0 === strpos($type, ':')) { $_SERVER['PATH_INFO'] = call_user_func(substr($type, 1)); break; } elseif (!empty($_SERVER[$type])) { $_SERVER['PATH_INFO'] = (0 === strpos($_SERVER[$type], $_SERVER['SCRIPT_NAME'])) ? substr($_SERVER[$type], strlen($_SERVER['SCRIPT_NAME'])) : $_SERVER[$type]; break; } } } $depr = C('URL_PATHINFO_DEPR'); define('MODULE_PATHINFO_DEPR', $depr); if (empty($_SERVER['PATH_INFO'])) { $_SERVER['PATH_INFO'] = ''; define('__INFO__', ''); define('__EXT__', ''); $paths = array(); } else { define('__EXT__', strtolower(pathinfo($_SERVER['PATH_INFO'], PATHINFO_EXTENSION))); if ($denySuffix = C('URL_DENY_SUFFIX')) { if (in_array(__EXT__, explode('|', strtolower(str_replace('.', '', $denySuffix))))) { send_http_status(404); exit; } } define('__INFO__', trim($_SERVER['PATH_INFO'], '/')); $_SERVER['PATH_INFO'] = preg_replace('/\.' . __EXT__ . '$/i', '', __INFO__); $paths = explode($depr, trim($_SERVER['PATH_INFO'], $depr)); } define('__SELF__', strip_tags($_SERVER[C('URL_REQUEST_URI')])); define('MODULE_NAME', self::getModule($paths)); if (MODULE_NAME && is_dir(APP_PATH . MODULE_NAME)) { define('MODULE_PATH', APP_PATH . MODULE_NAME . '/'); C('CACHE_PATH', CACHE_PATH . MODULE_NAME . '/'); C('LOG_PATH', realpath(LOG_PATH) . '/' . MODULE_NAME . '/'); Hook::listen('module_check'); if (is_file(MODULE_PATH . 'Conf/config' . CONF_EXT)) { C(load_config(MODULE_PATH . 'Conf/config' . CONF_EXT)); } if ('common' != APP_MODE && is_file(MODULE_PATH . 'Conf/config_' . APP_MODE . CONF_EXT)) { C(load_config(MODULE_PATH . 'Conf/config_' . APP_MODE . CONF_EXT)); } if (APP_STATUS && is_file(MODULE_PATH . 'Conf/' . APP_STATUS . CONF_EXT)) { C(load_config(MODULE_PATH . 'Conf/' . APP_STATUS . CONF_EXT)); } if (is_file(MODULE_PATH . 'Conf/alias.php')) { Think::addMap(include MODULE_PATH . 'Conf/alias.php'); } if (is_file(MODULE_PATH . 'Conf/tags.php')) { Hook::import(include MODULE_PATH . 'Conf/tags.php'); } if (is_file(MODULE_PATH . 'Common/function.php')) include MODULE_PATH . 'Common/function.php'; load_ext_file(MODULE_PATH); Hook::listen('module_config'); } else { E(L('_MODULE_NOT_EXIST_') . ':' . MODULE_NAME); } if (!defined('__APP__')) { $urlMode = C('URL_MODEL'); if (URL_COMPAT == $urlMode) { define('PHP_FILE', _PHP_FILE_ . '?' . $varPath . '='); } elseif (URL_REWRITE == $urlMode) { $url = dirname(_PHP_FILE_); if ('/' == $url || '\\' == $url) { $url = ''; } define('PHP_FILE', $url); } else { define('PHP_FILE', _PHP_FILE_); } define('__APP__', strip_tags(PHP_FILE)); } $moduleName = defined('MODULE_ALIAS') ? MODULE_ALIAS : MODULE_NAME; define('__MODULE__', (defined('BIND_MODULE') || !C('MULTI_MODULE')) ? __APP__ : __APP__ . '/' . ($urlCase ? strtolower($moduleName) : $moduleName)); define('CONTROLLER_NAME', self::getController($paths, $urlCase)); define('ACTION_NAME', self::getAction($paths, $urlCase)); if ($paths) { $var = array(); if (C('URL_PARAMS_BIND') && 1 == C('URL_PARAMS_BIND_TYPE')) { $var = $paths; } else { preg_replace_callback('/(\w+)\/([^\/]+)/', function ($match) use (&$var) { $var[$match[1]] = strip_tags($match[2]); }, implode('/', $paths)); } $_GET = array_merge($var, $_GET); } define('CONTROLLER_PATH', self::getSpace($urlCase)); $controllerName = defined('CONTROLLER_ALIAS') ? CONTROLLER_ALIAS : CONTROLLER_NAME; define('__CONTROLLER__', __MODULE__ . $depr . (defined('BIND_CONTROLLER') ? '' : ($urlCase ? parse_name($controllerName) : $controllerName))); define('__ACTION__', __CONTROLLER__ . $depr . (defined('ACTION_ALIAS') ? ACTION_ALIAS : ACTION_NAME)); $_REQUEST = array_merge($_POST, $_GET); } private static function getSpace($urlCase) { $var = C('VAR_ADDON'); $space = !empty($_GET[$var]) ? strip_tags($_GET[$var]) : ''; unset($_GET[$var]); return $space; } private static function getController(&$paths, $urlCase) { if (defined('BIND_CONTROLLER')) { return BIND_CONTROLLER; } else { if ($paths && C('URL_ROUTER_ON') && Route::check($paths)) { $depr = C('URL_PATHINFO_DEPR'); $paths = explode($depr, trim($_SERVER['PATH_INFO'], $depr)); } if ($paths) { Hook::listen('path_info'); if (C('CONTROLLER_LEVEL') > 1) { $controller = implode('/', array_slice($paths, 0, C('CONTROLLER_LEVEL'))); $paths = array_slice($paths, C('CONTROLLER_LEVEL')); } else { $controller = array_shift($paths); } } else { $var = C('VAR_CONTROLLER'); if (!empty($_GET[$var])) { $controller = $_GET[$var]; unset($_GET[$var]); } else { $controller = C('DEFAULT_CONTROLLER'); } } } if ($maps = C('URL_CONTROLLER_MAP')) { if (isset($maps[strtolower($controller)])) { define('CONTROLLER_ALIAS', strtolower($controller)); return ucfirst($maps[CONTROLLER_ALIAS]); } elseif (array_search(strtolower($controller), $maps)) { return ''; } } if ($urlCase) { $controller = parse_name($controller, 1); } return strip_tags(ucfirst($controller)); } private static function getAction(&$paths, $urlCase) { if (defined('BIND_ACTION')) { return BIND_ACTION; } else { if ($paths) { $action = array_shift($paths); } else { $var = C('VAR_ACTION'); if (!empty($_GET[$var])) { $action = $_GET[$var]; unset($_GET[$var]); } elseif (!empty($_POST[$var])) { $action = $_POST[$var]; unset($_POST[$var]); } else { $action = C('DEFAULT_ACTION'); } } } if ($maps = C('URL_ACTION_MAP')) { if (isset($maps[strtolower(CONTROLLER_NAME)])) { $maps = $maps[strtolower(CONTROLLER_NAME)]; if (isset($maps[strtolower($action)])) { define('ACTION_ALIAS', strtolower($action)); if (is_array($maps[ACTION_ALIAS])) { parse_str($maps[ACTION_ALIAS][1], $vars); $_GET = array_merge($_GET, $vars); return $maps[ACTION_ALIAS][0]; } else { return $maps[ACTION_ALIAS]; } } elseif (array_search(strtolower($action), $maps)) { return ''; } } } return strip_tags($urlCase ? strtolower($action) : $action); } private static function getModule(&$paths) { if (defined('BIND_MODULE')) { return BIND_MODULE; } else { if ($paths && C('URL_ROUTER_ON') && Route::check($paths)) { $paths = explode(MODULE_PATHINFO_DEPR, trim($_SERVER['PATH_INFO'], MODULE_PATHINFO_DEPR)); } if ($paths && C('MULTI_MODULE')) { $allowList = C('MODULE_ALLOW_LIST'); if (empty($allowList) || (is_array($allowList) && in_array_case($paths[0], $allowList))) { $module = array_shift($paths); $_SERVER['PATH_INFO'] = implode(MODULE_PATHINFO_DEPR, $paths); } } else { $var = C('VAR_MODULE'); if (!empty($_GET[$var])) { $module = $_GET[$var]; unset($_GET[$var]); } } if (empty($module)) { $module = C('DEFAULT_MODULE'); } } if ($maps = C('URL_MODULE_MAP')) { if (isset($maps[strtolower($module)])) { define('MODULE_ALIAS', strtolower($module)); return ucfirst($maps[MODULE_ALIAS]); } elseif (array_search(strtolower($module), $maps) || in_array_case($module, C('MODULE_DENY_LIST'))) { return ''; } } return strip_tags(ucfirst($module)); } }}namespace Think{ class Route { public static function check($paths = array()) { $rules = self::ruleCache(); if (!empty($paths)) { $regx = implode('/', $paths); } else { $depr = C('URL_PATHINFO_DEPR'); $regx = preg_replace('/\.' . __EXT__ . '$/i', '', trim($_SERVER['PATH_INFO'], $depr)); if (!$regx) { return false; } if ('/' != $depr) { $regx = str_replace($depr, '/', $regx); } } if (isset($rules[0][$regx])) { $route = $rules[0][$regx]; $_SERVER['PATH_INFO'] = $route[0]; $args = array_pop($route); if (!empty($route[1])) { $args = array_merge($args, $route[1]); } $_GET = array_merge($args, $_GET); return true; } if (!empty($rules[1])) { foreach ($rules[1] as $rule => $route) { $args = array_pop($route); if (isset($route[2])) { if (!self::checkOption($route[2], __EXT__)) { continue; } } if ($matches = self::checkUrlMatch($rule, $args, $regx)) { if ($route[0] instanceof \Closure) { $result = self::invoke($route[0], $matches); return is_bool($result) ? $result : exit; } else { if (strpos($route[0], ':')) { $matches = array_values($matches); $route[0] = preg_replace_callback('/:(\d+)/', function ($match) use (&$matches) { return $matches[$match[1] - 1]; }, $route[0]); } if ('/' == substr($rule, 0, 1)) { $rule_params = array(); foreach($route[1] as $param_key => $param) { list($param_name,$param_value) = explode('=', $param,2); if(!is_null($param_value)) { if(preg_match('/^:(\d*)$/',$param_value, $match_index)) { $match_index = $match_index[1]-1; $param_value = $matches[$match_index]; } $rule_params[$param_name] = $param_value; unset($route[1][$param_key]); } } $route[1] = $rule_params; } if ('/' == substr($route[0], 0, 1)) { header("Location: $route[0]", true, $route[1]); exit; } else { $depr = C('URL_PATHINFO_DEPR'); if ('/' != $depr) { $route[0] = str_replace('/', $depr, $route[0]); } $_SERVER['PATH_INFO'] = $route[0]; if (!empty($route[1])) { $_GET = array_merge($route[1], $_GET); } return true; } } } } } return false; } public static function reverse($path, &$vars, $depr, $suffix = true) { static $_rules; if (is_null($_rules)) { if ($rules = self::ruleCache()) { foreach ($rules as $i => $rules2) { foreach ($rules2 as $rule => $route) { if (is_array($route) && is_string($route[0]) && '/' != substr($route[0], 0, 1)) { $_rules[$i][$route[0]][$rule] = $route; } } } } } if (isset($_rules[0][$path])) { foreach ($_rules[0][$path] as $rule => $route) { $args = array_pop($route); if (count($vars) == count($args) && !empty($vars) && !array_diff($vars, $args)) { return str_replace('/', $depr, $rule); } } } if (isset($_rules[1][$path])) { foreach ($_rules[1][$path] as $rule => $route) { $args = array_pop($route); $array = array(); if (isset($route[2])) { if (!self::checkOption($route[2], $suffix)) { continue; } } if ('/' != substr($rule, 0, 1)) { foreach ($args as $key => $val) { $flag = false; if ($val[0] == 0) { $array[$key] = $key; continue; } if (isset($vars[$key])) { if (!empty($val[2])) { if ($val[2] == 'int') { if (!is_numeric($vars[$key]) || !preg_match('/^\d*$/',$vars[$key])) { break; } } else { if (in_array($vars[$key], $val[2])) { break; } } } $flag = true; $array[$key] = $vars[$key]; } elseif ($val[0] == 1) { break; } } if (!empty($flag)) { foreach (array_keys($array) as $key) { $array[$key] = urlencode($array[$key]); unset($vars[$key]); } return implode($depr, $array); } } else { $keys = !empty($args) ? array_keys($args) : array_keys($vars); $temp_vars = $vars; $str = preg_replace_callback('/\(.*?\)/', function ($match) use (&$temp_vars, &$keys) { $k = array_shift($keys); $re_var = ''; if(isset($temp_vars[$k])) { $re_var = $temp_vars[$k]; unset($temp_vars[$k]); } return urlencode($re_var); }, $rule); $str = substr($str, 1, -1); $str = rtrim(ltrim($str, '^'), '$'); $str = str_replace('\\', '', $str); if (preg_match($rule, $str, $matches)) { $vars = $temp_vars; return str_replace('/', $depr, $str); } } } } return false; } public static function ruleCache($update = false) { $result = array(); $module = defined('MODULE_NAME') ? '_' . MODULE_NAME : ''; if (APP_DEBUG || $update || !$result = S('url_route_rules' . $module)) { $result[0] = C('URL_MAP_RULES'); if (!empty($result[0])) { foreach ($result[0] as $rule => $route) { if (!is_array($route)) { $route = array($route); } if (strpos($route[0], '?')) { list($route[0], $args) = explode('?', $route[0], 2); parse_str($args, $args); } else { $args = array(); } if (!empty($route[1]) && is_string($route[1])) { parse_str($route[1], $route[1]); } $route[] = $args; $result[0][$rule] = $route; } } $result[1] = C('URL_ROUTE_RULES'); if (!empty($result[1])) { foreach ($result[1] as $rule => $route) { if (!is_array($route)) { $route = array($route); } elseif (is_numeric($rule)) { $rule = array_shift($route); } if (!empty($route)) { $args = array(); if (is_string($route[0])) { if (0 === strpos($route[0], '/') || 0 === strpos($route[0], 'http')) { if (!isset($route[1])) { $route[1] = 301; } } else { if (!empty($route[1]) && is_string($route[1])) { parse_str($route[1], $route[1]); } if (strpos($route[0], '?')) { list($route[0], $params) = explode('?', $route[0], 2); if (!empty($params)) { foreach (explode('&', $params) as $key => $val) { if (0 === strpos($val, ':')) { $val = substr($val, 1); $args[$key] = strpos($val, '|') ? explode('|', $val, 2) : array($val); } else { $route[1][$key] = $val; } } } } } } if ('/' != substr($rule, 0, 1)) { foreach (explode('/', rtrim($rule, '$')) as $item) { $filter = $fun = ''; $type = 0; if (0 === strpos($item, '[:')) { $type = 2; $item = substr($item, 1, -1); } if (0 === strpos($item, ':')) { $type = $type ?: 1; if ($pos = strpos($item, '|')) { $fun = substr($item, $pos + 1); $item = substr($item, 1, $pos - 1); } if ($pos = strpos($item, '^')) { $filter = explode('-', substr($item, $pos + 1)); $item = substr($item, 1, $pos - 1); } elseif (strpos($item, '\\')) { if ('d' == substr($item, -1)) { $filter = 'int'; } $item = substr($item, 1, -2); } else { $item = substr($item, 1); } } $args[$item] = array($type, $fun, $filter); } } $route[] = $args; $result[1][$rule] = $route; } else { unset($result[1][$rule]); } } } S('url_route_rules' . $module, $result); } return $result; } private static function checkOption($options, $suffix = true) { if (isset($options['ext'])) { if ($suffix) { $suffix = $suffix === true ? C('URL_HTML_SUFFIX') : $suffix; if ($pos = strpos($suffix, '|')) { $suffix = substr($suffix, 0, $pos); } } if ($suffix != $options['ext']) { return false; } } if (isset($options['method']) && REQUEST_METHOD != strtoupper($options['method'])) { return false; } if (!empty($options['callback']) && is_callable($options['callback'])) { if (false === call_user_func($options['callback'])) { return false; } } return true; } private static function checkUrlMatch(&$rule, &$args, &$regx) { $params = array(); if ('/' == substr($rule, 0, 1)) { if (preg_match($rule, $regx, $matches)) { if ($args) { foreach ($args as $key => $val) { $params[$key] = isset($val[1]) ? $val[1]($matches[$val[0]]) : $matches[$val[0]]; } $regx = substr_replace($regx, '', 0, strlen($matches[0])); } array_shift($matches); return $matches; } else { return false; } } else { $paths = explode('/', $regx); if ('$' == substr($rule, -1) && count($args) != count($paths)) { return false; } foreach ($args as $key => $val) { $var = array_shift($paths) ?: ''; if ($val[0] == 0) { if (0 !== strcasecmp($key, $var)) { return false; } } else { if (isset($val[2])) { if ($val[2] == 'int') { if (!preg_match('/^\d*$/',$var)) { return false; } } else { if (in_array($var, $val[2])) { return false; } } } if (!empty($var)) { $params[$key] = !empty($val[1]) ? $val[1]($var) : $var; } elseif ($val[0] == 1) { return false; } } } $matches = $params; $regx = implode('/', $paths); } if ($regx) { preg_replace_callback('/(\w+)\/([^\/]+)/', function ($match) use (&$params) { $params[strtolower($match[1])] = strip_tags($match[2]); }, $regx); } $_GET = array_merge($params, $_GET); return $matches; } private static function invoke($closure, $var = array()) { $reflect = new \ReflectionFunction($closure); $params = $reflect->getParameters(); $args = array(); foreach ($params as $i => $param) { $name = $param->getName(); if (isset($var[$name])) { $args[] = $var[$name]; } elseif (isset($var[$i])) { $args[] = $var[$i]; } elseif ($param->isDefaultValueAvailable()) { $args[] = $param->getDefaultValue(); } } return $reflect->invokeArgs($args); } }}namespace Think{ abstract class Controller { protected $view = null; protected $config = array(); public function __construct() { Hook::listen('action_begin', $this->config); $this->view = Think::instance('Think\View'); if (method_exists($this, '_initialize')) { $this->_initialize(); } } protected function display($templateFile = '', $charset = '', $contentType = '', $content = '', $prefix = '') { $this->view->display($templateFile, $charset, $contentType, $content, $prefix); } protected function show($content, $charset = '', $contentType = '', $prefix = '') { $this->view->display('', $charset, $contentType, $content, $prefix); } protected function fetch($templateFile = '', $content = '', $prefix = '') { return $this->view->fetch($templateFile, $content, $prefix); } protected function buildHtml($htmlfile = '', $htmlpath = '', $templateFile = '') { $content = $this->fetch($templateFile); $htmlpath = !empty($htmlpath) ? $htmlpath : HTML_PATH; $htmlfile = $htmlpath . $htmlfile . C('HTML_FILE_SUFFIX'); Storage::put($htmlfile, $content, 'html'); return $content; } protected function theme($theme) { $this->view->theme($theme); return $this; } protected function assign($name, $value = '') { $this->view->assign($name, $value); return $this; } public function __set($name, $value) { $this->assign($name, $value); } public function get($name = '') { return $this->view->get($name); } public function __get($name) { return $this->get($name); } public function __isset($name) { return $this->get($name); } public function __call($method, $args) { if (0 === strcasecmp($method, ACTION_NAME . C('ACTION_SUFFIX'))) { if (method_exists($this, '_empty')) { $this->_empty($method, $args); } elseif (file_exists_case($this->view->parseTemplate())) { $this->display(); } else { E(L('_ERROR_ACTION_') . ':' . ACTION_NAME); } } else { E(__CLASS__ . ':' . $method . L('_METHOD_NOT_EXIST_')); return; } } protected function error($message = '', $jumpUrl = '', $ajax = false) { $this->dispatchJump($message, 0, $jumpUrl, $ajax); } protected function success($message = '', $jumpUrl = '', $ajax = false) { $this->dispatchJump($message, 1, $jumpUrl, $ajax); } protected function ajaxReturn($data, $type = '', $json_option = 0) { if (empty($type)) { $type = C('DEFAULT_AJAX_RETURN'); } switch (strtoupper($type)) { case 'JSON': header('Content-Type:application/json; charset=utf-8'); exit(json_encode($data, $json_option)); case 'XML': header('Content-Type:text/xml; charset=utf-8'); exit(xml_encode($data)); case 'JSONP': header('Content-Type:application/json; charset=utf-8'); $handler = isset($_GET[C('VAR_JSONP_HANDLER')]) ? $_GET[C('VAR_JSONP_HANDLER')] : C('DEFAULT_JSONP_HANDLER'); exit($handler . '(' . json_encode($data, $json_option) . ');'); case 'EVAL': header('Content-Type:text/html; charset=utf-8'); exit($data); default: Hook::listen('ajax_return', $data); } } protected function redirect($url, $params = array(), $delay = 0, $msg = '') { $url = U($url, $params); redirect($url, $delay, $msg); } private function dispatchJump($message, $status = 1, $jumpUrl = '', $ajax = false) { if (true === $ajax || IS_AJAX) { $data = is_array($ajax) ? $ajax : array(); $data['info'] = $message; $data['status'] = $status; $data['url'] = $jumpUrl; $this->ajaxReturn($data); } if (is_int($ajax)) { $this->assign('waitSecond', $ajax); } if (!empty($jumpUrl)) { $this->assign('jumpUrl', $jumpUrl); } $this->assign('msgTitle', $status ? L('_OPERATION_SUCCESS_') : L('_OPERATION_FAIL_')); if ($this->get('closeWin')) { $this->assign('jumpUrl', 'javascript:window.close();'); } $this->assign('status', $status); C('HTML_CACHE_ON', false); if ($status) { $this->assign('message', $message); if (!isset($this->waitSecond)) { $this->assign('waitSecond', '1'); } if (!isset($this->jumpUrl)) { $this->assign("jumpUrl", $_SERVER["HTTP_REFERER"]); } $this->display(C('TMPL_ACTION_SUCCESS')); } else { $this->assign('error', $message); if (!isset($this->waitSecond)) { $this->assign('waitSecond', '3'); } if (!isset($this->jumpUrl)) { $this->assign('jumpUrl', "javascript:history.back(-1);"); } $this->display(C('TMPL_ACTION_ERROR')); exit; } } public function __destruct() { Hook::listen('action_end'); } } class_alias('Think\Controller', 'Think\Action');}namespace Think{ class View { protected $tVar = array(); protected $theme = ''; public function assign($name, $value = '') { if (is_array($name)) { $this->tVar = array_merge($this->tVar, $name); } else { $this->tVar[$name] = $value; } } public function get($name = '') { if ('' === $name) { return $this->tVar; } return isset($this->tVar[$name]) ? $this->tVar[$name] : false; } public function display($templateFile = '', $charset = '', $contentType = '', $content = '', $prefix = '') { G('viewStartTime'); Hook::listen('view_begin', $templateFile); $content = $this->fetch($templateFile, $content, $prefix); $this->render($content, $charset, $contentType); Hook::listen('view_end'); } private function render($content, $charset = '', $contentType = '') { if (empty($charset)) { $charset = C('DEFAULT_CHARSET'); } if (empty($contentType)) { $contentType = C('TMPL_CONTENT_TYPE'); } header('Content-Type:' . $contentType . '; charset=' . $charset); header('Cache-control: ' . C('HTTP_CACHE_CONTROL')); header('X-Powered-By:ThinkPHP'); echo $content; } public function fetch($templateFile = '', $content = '', $prefix = '') { if (empty($content)) { $templateFile = $this->parseTemplate($templateFile); if (!is_file($templateFile)) { E(L('_TEMPLATE_NOT_EXIST_') . ':' . $templateFile); } } else { defined('THEME_PATH') or define('THEME_PATH', $this->getThemePath()); } ob_start(); ob_implicit_flush(0); if ('php' == strtolower(C('TMPL_ENGINE_TYPE'))) { if (empty($content)) { if (isset($this->tVar['templateFile'])) { $__template__ = $templateFile; extract($this->tVar, EXTR_OVERWRITE); include $__template__; } else { extract($this->tVar, EXTR_OVERWRITE); include $templateFile; } } elseif (isset($this->tVar['content'])) { $__content__ = $content; extract($this->tVar, EXTR_OVERWRITE); eval('?>' . $__content__); } else { extract($this->tVar, EXTR_OVERWRITE); eval('?>' . $content); } } else { $params = array('var' => $this->tVar, 'file' => $templateFile, 'content' => $content, 'prefix' => $prefix); Hook::listen('view_parse', $params); } $content = ob_get_clean(); Hook::listen('view_filter', $content); if (APP_DEBUG && C('PARSE_VAR')) { $parseVar = empty($this->tVar) ? json_encode(array()) : json_encode($this->tVar); $content = $content . '<script type="text/javascript">var PARSE_VAR = ' . $parseVar . ';</script>'; } return $content; } public function parseTemplate($template = '') { if (is_file($template)) { return $template; } $depr = C('TMPL_FILE_DEPR'); $template = str_replace(':', $depr, $template); $module = MODULE_NAME; if (strpos($template, '@')) { list($module, $template) = explode('@', $template); } defined('THEME_PATH') or define('THEME_PATH', $this->getThemePath($module)); if ('' == $template) { $template = CONTROLLER_NAME . $depr . ACTION_NAME; } elseif (false === strpos($template, $depr)) { $template = CONTROLLER_NAME . $depr . $template; } $file = THEME_PATH . $template . C('TMPL_TEMPLATE_SUFFIX'); if (C('TMPL_LOAD_DEFAULTTHEME') && THEME_NAME != C('DEFAULT_THEME') && !is_file($file)) { $file = dirname(THEME_PATH) . '/' . C('DEFAULT_THEME') . '/' . $template . C('TMPL_TEMPLATE_SUFFIX'); } return $file; } protected function getThemePath($module = MODULE_NAME) { $theme = $this->getTemplateTheme(); $tmplPath = C('VIEW_PATH'); if (!$tmplPath) { $tmplPath = defined('TMPL_PATH') ? TMPL_PATH . $module . '/' : APP_PATH . $module . '/' . C('DEFAULT_V_LAYER') . '/'; } return $tmplPath . $theme; } public function theme($theme) { $this->theme = $theme; return $this; } private function getTemplateTheme() { if ($this->theme) { $theme = $this->theme; } else { $theme = C('DEFAULT_THEME'); if (C('TMPL_DETECT_THEME')) { $t = C('VAR_TEMPLATE'); if (isset($_GET[$t])) { $theme = $_GET[$t]; } elseif (cookie('think_template')) { $theme = cookie('think_template'); } if (!in_array($theme, explode(',', C('THEME_LIST')))) { $theme = C('DEFAULT_THEME'); } cookie('think_template', $theme, 864000); } } defined('THEME_NAME') || define('THEME_NAME', $theme); return $theme ? $theme . '/' : ''; } }}namespace Behavior{ use Think\Hook as Hook; class BuildLiteBehavior { public function run(&$params) { if (!defined('BUILD_LITE_FILE') || BUILD_LITE_FILE == false) { return; } $litefile = C('RUNTIME_LITE_FILE', null, RUNTIME_PATH . 'lite.php'); if (is_file($litefile)) { return; } $defs = get_defined_constants(true); $content = 'namespace {$GLOBALS[\'_beginTime\'] = microtime(TRUE);'; if (MEMORY_LIMIT_ON) { $content .= '$GLOBALS[\'_startUseMems\'] = memory_get_usage();'; } unset($defs['user']['BUILD_LITE_FILE']); $content .= $this->buildArrayDefine($defs['user']) . '}'; $filelist = is_file(CONF_PATH . 'lite.php') ? include CONF_PATH . 'lite.php' : array( THINK_PATH . 'Common/functions.php', COMMON_PATH . 'Common/function.php', CORE_PATH . 'Think' . EXT, CORE_PATH . 'Hook' . EXT, CORE_PATH . 'App' . EXT, CORE_PATH . 'Dispatcher' . EXT, CORE_PATH . 'Log' . EXT, CORE_PATH . 'Log/Driver/File' . EXT, CORE_PATH . 'Route' . EXT, CORE_PATH . 'Controller' . EXT, CORE_PATH . 'View' . EXT, CORE_PATH . 'Storage' . EXT, CORE_PATH . 'Storage/Driver/File' . EXT, CORE_PATH . 'Exception' . EXT, BEHAVIOR_PATH . 'ParseTemplateBehavior' . EXT, BEHAVIOR_PATH . 'ContentReplaceBehavior' . EXT, ); foreach ($filelist as $file) { if (is_file($file)) { $content .= compile($file); } } $content = preg_replace('/\$runtimefile = RUNTIME_PATH(.+?)(if\(APP_STATUS)/', '\2', $content, 1); $content .= "\nnamespace { Think\Think::addMap(" . var_export(\Think\Think::getMap(), true) . ");"; $content .= "\nL(" . var_export(L(), true) . ");\nC(" . var_export(C(), true) . ');Think\Hook::import(' . var_export(\Think\Hook::get(), true) . ');Think\Think::start();}'; file_put_contents($litefile, strip_whitespace('<?php ' . $content)); } private function buildArrayDefine($array) { $content = "\n"; foreach ($array as $key => $val) { $key = strtoupper($key); $content .= 'defined(\'' . $key . '\') or '; if (is_int($val) || is_float($val)) { $content .= "define('" . $key . "'," . $val . ');'; } elseif (is_bool($val)) { $val = ($val) ? 'true' : 'false'; $content .= "define('" . $key . "'," . $val . ');'; } elseif (is_string($val)) { $content .= "define('" . $key . "','" . addslashes($val) . "');"; } $content .= "\n"; } return $content; } }}namespace Behavior{ use Think\Storage; use Think\Think; class ParseTemplateBehavior { public function run(&$_data) { $engine = strtolower(C('TMPL_ENGINE_TYPE')); $_content = empty($_data['content']) ? $_data['file'] : $_data['content']; $_data['prefix'] = !empty($_data['prefix']) ? $_data['prefix'] : C('TMPL_CACHE_PREFIX'); if ('think' == $engine) { if ((!empty($_data['content']) && $this->checkContentCache($_data['content'], $_data['prefix'])) || $this->checkCache($_data['file'], $_data['prefix'])) { Storage::load(C('CACHE_PATH') . $_data['prefix'] . md5($_content) . C('TMPL_CACHFILE_SUFFIX'), $_data['var']); } else { $tpl = Think::instance('Think\\Template'); $tpl->fetch($_content, $_data['var'], $_data['prefix']); } } else { if (strpos($engine, '\\')) { $class = $engine; } else { $class = 'Think\\Template\\Driver\\' . ucwords($engine); } if (class_exists($class)) { $tpl = new $class; $tpl->fetch($_content, $_data['var']); } else { E(L('_NOT_SUPPORT_') . ': ' . $class); } } } protected function checkCache($tmplTemplateFile, $prefix = '') { if (!C('TMPL_CACHE_ON')) { return false; } $tmplCacheFile = C('CACHE_PATH') . $prefix . md5($tmplTemplateFile) . C('TMPL_CACHFILE_SUFFIX'); if (!Storage::has($tmplCacheFile)) { return false; } elseif (filemtime($tmplTemplateFile) > Storage::get($tmplCacheFile, 'mtime')) { return false; } elseif (C('TMPL_CACHE_TIME') != 0 && time() > Storage::get($tmplCacheFile, 'mtime') + C('TMPL_CACHE_TIME')) { return false; } if (C('LAYOUT_ON')) { $layoutFile = THEME_PATH . C('LAYOUT_NAME') . C('TMPL_TEMPLATE_SUFFIX'); if (filemtime($layoutFile) > Storage::get($tmplCacheFile, 'mtime')) { return false; } } return true; } protected function checkContentCache($tmplContent, $prefix = '') { if (Storage::has(C('CACHE_PATH') . $prefix . md5($tmplContent) . C('TMPL_CACHFILE_SUFFIX'))) { return true; } else { return false; } } }}namespace Behavior{ class ContentReplaceBehavior { public function run(&$content) { $content = $this->templateContentReplace($content); } protected function templateContentReplace($content) { $replace = array( '__ROOT__' => __ROOT__, '__APP__' => __APP__, '__MODULE__' => __MODULE__, '__ACTION__' => __ACTION__, '__SELF__' => htmlentities(__SELF__), '__CONTROLLER__' => __CONTROLLER__, '__URL__' => __CONTROLLER__, '__PUBLIC__' => __ROOT__ . '/Public', ); if (is_array(C('TMPL_PARSE_STRING'))) { $replace = array_merge($replace, C('TMPL_PARSE_STRING')); } $content = str_replace(array_keys($replace), array_values($replace), $content); return $content; } }} namespace { Think\Think::addMap(array ( 'Think\\Log' => '/Users/yangyupeng/web/tao_yibangou_com/ThinkPHP/Library/Think/Log.class.php', 'Think\\Log\\Driver\\File' => '/Users/yangyupeng/web/tao_yibangou_com/ThinkPHP/Library/Think/Log/Driver/File.class.php', 'Think\\Exception' => '/Users/yangyupeng/web/tao_yibangou_com/ThinkPHP/Library/Think/Exception.class.php', 'Think\\Model' => '/Users/yangyupeng/web/tao_yibangou_com/ThinkPHP/Library/Think/Model.class.php', 'Think\\Db' => '/Users/yangyupeng/web/tao_yibangou_com/ThinkPHP/Library/Think/Db.class.php', 'Think\\Template' => '/Users/yangyupeng/web/tao_yibangou_com/ThinkPHP/Library/Think/Template.class.php', 'Think\\Cache' => '/Users/yangyupeng/web/tao_yibangou_com/ThinkPHP/Library/Think/Cache.class.php', 'Think\\Cache\\Driver\\File' => '/Users/yangyupeng/web/tao_yibangou_com/ThinkPHP/Library/Think/Cache/Driver/File.class.php', 'Think\\Storage' => '/Users/yangyupeng/web/tao_yibangou_com/ThinkPHP/Library/Think/Storage.class.php', )); L(array ( '_MODULE_NOT_EXIST_' => '无法加载模块', '_CONTROLLER_NOT_EXIST_' => '无法加载控制器', '_ERROR_ACTION_' => '非法操作', '_LANGUAGE_NOT_LOAD_' => '无法加载语言包', '_TEMPLATE_NOT_EXIST_' => '模板不存在', '_MODULE_' => '模块', '_ACTION_' => '操作', '_MODEL_NOT_EXIST_' => '模型不存在或者没有定义', '_VALID_ACCESS_' => '没有权限', '_XML_TAG_ERROR_' => 'XML标签语法错误', '_DATA_TYPE_INVALID_' => '非法数据对象！', '_OPERATION_WRONG_' => '操作出现错误', '_NOT_LOAD_DB_' => '无法加载数据库', '_NO_DB_DRIVER_' => '无法加载数据库驱动', '_NOT_SUPPORT_DB_' => '系统暂时不支持数据库', '_NO_DB_CONFIG_' => '没有定义数据库配置', '_NOT_SUPPORT_' => '系统不支持', '_CACHE_TYPE_INVALID_' => '无法加载缓存类型', '_FILE_NOT_WRITABLE_' => '目录（文件）不可写', '_METHOD_NOT_EXIST_' => '方法不存在！', '_CLASS_NOT_EXIST_' => '实例化一个不存在的类！', '_CLASS_CONFLICT_' => '类名冲突', '_TEMPLATE_ERROR_' => '模板引擎错误', '_CACHE_WRITE_ERROR_' => '缓存文件写入失败！', '_TAGLIB_NOT_EXIST_' => '标签库未定义', '_OPERATION_FAIL_' => '操作失败！', '_OPERATION_SUCCESS_' => '操作成功！', '_SELECT_NOT_EXIST_' => '记录不存在！', '_EXPRESS_ERROR_' => '表达式错误', '_TOKEN_ERROR_' => '表单令牌错误', '_RECORD_HAS_UPDATE_' => '记录已经更新', '_NOT_ALLOW_PHP_' => '模板禁用PHP代码', '_PARAM_ERROR_' => '参数错误或者未定义', '_ERROR_QUERY_EXPRESS_' => '错误的查询条件', )); C(array ( 'APP_USE_NAMESPACE' => true, 'APP_SUB_DOMAIN_DEPLOY' => 0, 'APP_SUB_DOMAIN_RULES' => array ( 'www' => 'Home', 'admin' => 'Admin', 'm' => 'M', ), 'APP_DOMAIN_SUFFIX' => '', 'ACTION_SUFFIX' => '', 'MULTI_MODULE' => true, 'MODULE_DENY_LIST' => array ( 0 => 'Common', 1 => 'Runtime', ), 'CONTROLLER_LEVEL' => 1, 'APP_AUTOLOAD_LAYER' => 'Action,Model', 'APP_AUTOLOAD_PATH' => '@.TagLib', 'COOKIE_EXPIRE' => 604800, 'COOKIE_DOMAIN' => '', 'COOKIE_PATH' => '/', 'COOKIE_PREFIX' => 'tqk', 'COOKIE_SECURE' => false, 'COOKIE_HTTPONLY' => '', 'DEFAULT_M_LAYER' => 'Model', 'DEFAULT_C_LAYER' => 'Action', 'DEFAULT_V_LAYER' => 'View', 'DEFAULT_LANG' => 'zh-cn', 'DEFAULT_THEME' => '', 'DEFAULT_MODULE' => 'Home', 'DEFAULT_CONTROLLER' => 'Index', 'DEFAULT_ACTION' => 'index', 'DEFAULT_CHARSET' => 'utf-8', 'DEFAULT_TIMEZONE' => 'PRC', 'DEFAULT_AJAX_RETURN' => 'JSON', 'DEFAULT_JSONP_HANDLER' => 'jsonpReturn', 'DEFAULT_FILTER' => 'htmlspecialchars,fanXSS', 'DB_TYPE' => 'mysqli', 'DB_HOST' => '127.0.0.1', 'DB_NAME' => '', 'DB_USER' => '', 'DB_PWD' => '', 'DB_PORT' => '', 'DB_PREFIX' => 'tqk_', 'DB_PARAMS' => array ( 8 => 0, ), 'DB_DEBUG' => true, 'DB_FIELDS_CACHE' => true, 'DB_CHARSET' => 'utf8', 'DB_DEPLOY_TYPE' => 0, 'DB_RW_SEPARATE' => false, 'DB_MASTER_NUM' => 1, 'DB_SLAVE_NO' => '', 'DATA_CACHE_TIME' => 0, 'DATA_CACHE_COMPRESS' => false, 'DATA_CACHE_CHECK' => false, 'DATA_CACHE_PREFIX' => '', 'DATA_CACHE_TYPE' => 'File', 'DATA_CACHE_PATH' => './data/install/Temp/', 'DATA_CACHE_KEY' => '', 'DATA_CACHE_SUBDIR' => false, 'DATA_PATH_LEVEL' => 3, 'ERROR_MESSAGE' => '页面错误！请稍后再试～', 'ERROR_PAGE' => '', 'SHOW_ERROR_MSG' => false, 'TRACE_MAX_RECORD' => 100, 'LOG_RECORD' => false, 'LOG_TYPE' => 'File', 'LOG_LEVEL' => 'EMERG,ALERT,CRIT,ERR', 'LOG_FILE_SIZE' => 2097152, 'LOG_EXCEPTION_RECORD' => false, 'SESSION_AUTO_START' => true, 'SESSION_OPTIONS' => array ( ), 'SESSION_TYPE' => '', 'SESSION_PREFIX' => '_dg_view', 'TMPL_CONTENT_TYPE' => 'text/html', 'TMPL_ACTION_ERROR' => '/Users/yangyupeng/web/tao_yibangou_com/ThinkPHP/Tpl/dispatch_jump.tpl', 'TMPL_ACTION_SUCCESS' => '/Users/yangyupeng/web/tao_yibangou_com/ThinkPHP/Tpl/dispatch_jump.tpl', 'TMPL_EXCEPTION_FILE' => '/Users/yangyupeng/web/tao_yibangou_com/ThinkPHP/Tpl/think_exception.tpl', 'TMPL_DETECT_THEME' => false, 'TMPL_TEMPLATE_SUFFIX' => '.html', 'TMPL_FILE_DEPR' => '/', 'TMPL_ENGINE_TYPE' => 'Think', 'TMPL_CACHFILE_SUFFIX' => '.php', 'TMPL_DENY_FUNC_LIST' => 'echo,exit', 'TMPL_DENY_PHP' => false, 'TMPL_L_DELIM' => '{', 'TMPL_R_DELIM' => '}', 'TMPL_VAR_IDENTIFY' => 'array', 'TMPL_STRIP_SPACE' => true, 'TMPL_CACHE_ON' => true, 'TMPL_CACHE_PREFIX' => '', 'TMPL_CACHE_TIME' => 0, 'TMPL_LAYOUT_ITEM' => '{__CONTENT__}', 'LAYOUT_ON' => false, 'LAYOUT_NAME' => 'layout', 'TAGLIB_BEGIN' => '<', 'TAGLIB_END' => '>', 'TAGLIB_LOAD' => true, 'TAGLIB_BUILD_IN' => 'cx,Common\\TagLib\\TagLibLoad', 'TAGLIB_PRE_LOAD' => '', 'URL_CASE_INSENSITIVE' => false, 'URL_MODEL' => 1, 'URL_PATHINFO_DEPR' => '/', 'URL_PATHINFO_FETCH' => 'ORIG_PATH_INFO,REDIRECT_PATH_INFO,REDIRECT_URL', 'URL_REQUEST_URI' => 'REQUEST_URI', 'URL_HTML_SUFFIX' => 'html', 'URL_DENY_SUFFIX' => 'ico|png|gif|jpg', 'URL_PARAMS_BIND' => true, 'URL_PARAMS_BIND_TYPE' => 0, 'URL_PARAMS_FILTER' => false, 'URL_PARAMS_FILTER_TYPE' => '', 'URL_ROUTER_ON' => true, 'URL_ROUTE_RULES' => array ( '/^index$/' => 'index', '/^index\\/so\\/k\\/(.*?)\\/p\\/(\\d+)$/' => 'index/so?k=:1&p=:2', '/^index\\/search\\/key\\/(.*?)\\/p\\/(\\d+)$/' => 'index/search?key=:1&p=:2', '/^index\\/index\\/sort\\/(\\w+)$/' => 'index/index?&sort=:1', '/^index\\/index\\/sort\\/(\\w+)\\/p\\/(\\d+)$/' => 'index/index?sort=:1&p=:2', '/^cate\\/cid\\/(\\d+)\\/sort\\/(\\w+)$/' => 'index/cate?cid=:1&sort=:2', '/^cate\\/cid\\/(\\d+)\\/sort\\/(\\w+)\\/p\\/(\\d+)$/' => 'index/cate?cid=:1&sort=:2&p=:3', '/^index\\/p\\/(\\d+)$/' => 'index/index?p=:1', '/^cate\\/cid\\/(\\d+)\\/p\\/(\\d+)$/' => 'index/cate?cid=:1&p=:2', '/^cate\\/cid\\/(\\d+)$/' => 'index/cate?cid=:1', '/^shortcut\\/$/' => 'index/shortcut', '/^chaxun\\/$/' => 'chaxun/index', '/^score\\/$/' => 'score/index', '/^sou\\/$/' => 'sou/index', 'sou/:id' => 'sou/index', '/^comment\\/$/' => 'comment/index', '/^comment\\/p\\/(\\d+)$/' => 'comment/index?p=:1', '/^baoming$/' => 'baoming/shenhe', '/^baoming\\/p\\/(\\d+)$/' => 'baoming/my?p=:1', '/^inval\\/(\\d+)$/' => 'inval/index?id=:1', '/^help\\/(\\d+)$/' => 'help/read?id=:1', '/^user\\/register$/' => 'user/register', '/^user\\/login$/' => 'user/login', '/^user\\/logout$/' => 'user/logout', '/^union$/' => 'union/index', '/^gift$/' => 'gift/index', '/^gift\\/p\\/(\\d+)$/' => 'gift/index?p=:1', '/^gift\\/cid\\/(\\d+)$/' => 'gift/index?cid=:1', '/^gift\\/item\\/(\\d+)$/' => 'gift/detail?id=:1', '/^space$/' => 'space/index', '/^space\\/(\\d+)$/' => 'space/index?uid=:1', '/^article\\/view_(\\d+)$/' => 'article/read?id=:1', '/^jump\\/item\\/(\\d+)$/' => 'jump/index?iid=:1', '/^jump\\/(\\d+)$/' => 'jump/index?id=:1', '/^jump\\/$/' => 'jump/index', '/^list\\/$/' => 'list/index', '/^list\\/p\\/(\\d+)$/' => 'list/index?p=:1', '/^item\\/id\\/(\\d+)$/' => 'item/index?id=:1', '/^item\\/iid\\/(\\d+)$/' => 'item/index?iid=:1', '/^pdditem\\/id\\/(\\d+)$/' => 'pdditem/index?id=:1', '/^pdditem\\/iid\\/(\\d+)$/' => 'pdditem/index?iid=:1', '/^detail\\/id\\/(\\d+)$/' => 'detail/index?id=:1', '/^detail\\/iid\\/(\\d+)$/' => 'detail/index?iid=:1', '/^out\\/action\\/(.*?)\\/id\\/(\\d+)$/' => 'out/index?action=:1&id=:2', '/^m\\/cate\\/cid\\/(\\d+)\\/sort\\/(\\w+)$/' => 'index/cate?cid=:1&sort=:2', '/^m\\/cate\\/cid\\/(\\d+)\\/sort\\/(\\w+)\\/p\\/(\\d+)$/' => 'index/cate?cid=:1&sort=:2&p=:3', '/^m\\/detail\\/id\\/(\\d+)$/' => 'm/detail/index?id=:1', ), 'URL_MAP_RULES' => array ( ), 'VAR_MODULE' => 'm', 'VAR_ADDON' => 'addon', 'VAR_CONTROLLER' => 'c', 'VAR_ACTION' => 'a', 'VAR_AJAX_SUBMIT' => 'ajax', 'VAR_JSONP_HANDLER' => 'callback', 'VAR_PATHINFO' => 's', 'VAR_TEMPLATE' => 't', 'VAR_AUTO_STRING' => false, 'HTTP_CACHE_CONTROL' => 'private', 'CHECK_APP_DIR' => true, 'FILE_UPLOAD_TYPE' => 'Local', 'DATA_CRYPT_TYPE' => 'Think', 'HTML_CACHE_ON' => false, 'MODULE_ALLOW_LIST' => array ( 0 => 'Home', 1 => 'M', 2 => 'Admin', 3 => 'Wap', 4 => 'Install', ), 'SHOW_PAGE_TRACE' => false, 'SUPER_MANAGER_ID' => '1', 'TMPL_PARSE_STRING' => array ( '__STATIC__' => '/Public/static', '__IMG__' => '/Public/static/images', '__CSS__' => '/Public/static/css', '__JS__' => '/Public/static/js', ), 'LANG_SWITCH_ON' => true, 'LANG_AUTO_DETECT' => false, 'LANG_LIST' => 'zh-cn', 'VAR_LANGUAGE' => 'l', ));Think\Hook::import(array ( 'app_init' => array ( 0 => 'Behavior\\BuildLiteBehavior', ), 'app_begin' => array ( 0 => 'Behavior\\ReadHtmlCacheBehavior', 1 => 'Behavior\\CheckLangBehavior', ), 'app_end' => array ( 0 => 'Behavior\\ShowPageTraceBehavior', ), 'view_parse' => array ( 0 => 'Behavior\\ParseTemplateBehavior', ), 'template_filter' => array ( 0 => 'Behavior\\ContentReplaceBehavior', ), 'view_filter' => array ( 0 => 'Behavior\\WriteHtmlCacheBehavior', ), ));}